9

行を選択できるGridViewがあります。次に、グリッドの上に[編集]というボタンがあり、ユーザーはこのボタンをクリックしてウィンドウをポップアップし、選択した行を編集できます。したがって、ボタンの後ろには、次の行に沿ってJavascriptコードがあります。

function editRecord()
{
  var gridView = document.getElementById("<%= GridView.ClientID %>");
  var id = // somehow get the id here ???
  window.open("edit.aspx?id=" + id);
}

問題は、JavaScriptで選択したレコードIDを取得するにはどうすればよいですか?

4

4 に答える 4

10

JasonSの応答に基づいて解決しました。私がしたことは、次のようにグリッド ビューに隠しフィールドを作成することでした。

<asp:TemplateField ShowHeader="False">
    <ItemTemplate>
      <asp:HiddenField ID="hdID" runat="server" Value='<%# Eval("JobID") %>' />
    </ItemTemplate>
</asp:TemplateField>
<asp:TemplateField Visible="False">
    <ItemTemplate>
      <asp:LinkButton ID="lnkSelect" runat="server" CommandName="select" Text="Select" />
    </ItemTemplate>
</asp:TemplateField>

次に、OnRowDataBind で、選択した行を設定するコードを用意します。

protected virtual void Grid_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        // Click to highlight row
        Control lnkSelect = e.Row.FindControl("lnkSelect");
        if (lnkSelect != null)
        {
            StringBuilder click = new StringBuilder();
            click.AppendLine(m_View.Page.ClientScript.GetPostBackClientHyperlink(lnkSelect, String.Empty));
            click.AppendLine(String.Format("onGridViewRowSelected('{0}')", e.Row.RowIndex));
            e.Row.Attributes.Add("onclick", click.ToString());
        }
    }            
}

そして、Javascriptには次のようなコードがあります

<script type="text/javascript">

var selectedRowIndex = null;

function onGridViewRowSelected(rowIndex)
{        
    selectedRowIndex = rowIndex;
}

function editItem()
{   
    if (selectedRowIndex == null) return;

    var gridView = document.getElementById('<%= GridView1.ClientID %>');                
    var cell = gridView.rows[parseInt(selectedRowIndex)+1].cells[0];        
    var hidID = cell.childNodes[0];        
    window.open('JobTypeEdit.aspx?id=' + hidID.value);
}

</script> 

御馳走になります:-)

于 2008-10-23T05:22:53.583 に答える
1

1)パラメータを使用するようにJavaScript関数を変更します

function editRecord(clientId)
{ ....

2)editRecordボタンで呼び出しを出力します... .netで生成されたIDの処理を避けたい場合は、単純なものを使用してください

<input type="button" onclick="editRecord(your-rows-client-id-goes-here)" />
于 2008-10-23T04:33:55.430 に答える
1

@DaveK の応答に対するコメントに基づいて、javascript で、ユーザーが選択したときに非表示フィールドの ID を選択した行の clientId に設定できます。次に、非表示のフォーム フィールドに設定された値を editRecord 関数に使用させます。

于 2008-10-23T04:41:18.160 に答える
0

各行のクエリ文字列が事前に入力されたアンカータグを設定することで、JavaScriptを完全に回避できます(これはテーブルのレイアウトに影響しますが、ユーザーからの2回のクリックではなく1回のクリックで済みます)

gridviewテンプレートに挿入します。

<asp:HyperLink runat="server" ID="editLink" Target="_blank"
   NavigateURL='<%# Eval("JobID","edit.aspx?id={0}") %>'> 
     Edit..
</asp:HyperLink>
于 2012-01-18T03:12:30.020 に答える