52

アイテムIDであるがGridView関連付けられています。イベントDataKey内でその値を取得するにはどうすればよいですか?RowCommand

これはうまくいくようですが、キャストが好きではありませんLinkButton(他のコマンドがイベントを起動している場合はどうなりますか?)、そして私はNamingContainerビットについてあまり自信がありません。

LinkButton lb = (LinkButton)e.CommandSource;
GridViewRow gvr = (GridViewRow)lb.NamingContainer;
int id = (int)grid.DataKeys[gvr.RowIndex].Value;

代わりにそのIDをとして渡すことができることは承知していますが、柔軟性を高めるためCommandArgumentに使用することにしました。DataKey

IDに隠しフィールドを使用できることも承知していますが、使用したくないハックだと思います。

4

5 に答える 5

93

私は通常、CommandArgumentを介してRowIndexを渡し、それを使用して必要なDataKey値を取得します。

ボタン上:

CommandArgument='<%# DataBinder.Eval(Container, "RowIndex") %>'

サーバーイベントについて

int rowIndex = int.Parse(e.CommandArgument.ToString());
string val = (string)this.grid.DataKeys[rowIndex]["myKey"];
于 2010-05-12T12:33:25.313 に答える
33

私はこのコードを使用してDataKeysの値を取得することができました:

GridViewに追加しました:

DataKeyNames="ID" OnRowCommand="myRowCommand"

次に、私の行コマンド関数で:

protected void myRowCommand(object sender, GridViewCommandEventArgs e) 
{
    LinkButton lnkBtn = (LinkButton)e.CommandSource;    // the button
    GridViewRow myRow = (GridViewRow)lnkBtn.Parent.Parent;  // the row
    GridView myGrid = (GridView)sender; // the gridview
    string ID = myGrid.DataKeys[myRow.RowIndex].Value.ToString(); // value of the datakey 

    switch (e.CommandName)
    {
      case "cmd1":
      // do something using the ID
      break;
      case "cmd2":
      // do something else using the ID
      break;
    }
 }
于 2011-07-12T23:33:00.317 に答える
12
foreach (GridViewRow gvr in gvMyGridView.Rows)
{
    string PrimaryKey = gvMyGridView.DataKeys[gvr.RowIndex].Values[0].ToString();
}

このコードは、のforeachような任意のGridViewイベントを使用して、またはそのために反復を実行するときに使用できますOnRowDataBound

DataKeyNamesここでは、カンマで区切っての複数の値を入力できます,。たとえば、DataKeyNames="ProductID,ItemID,OrderID"

DataKeys以下のようにインデックスを提供することで、それぞれにアクセスできるようになりました。

string ProductID = gvMyGridView.DataKeys[gvr.RowIndex].Values[0].ToString();
string ItemID = gvMyGridView.DataKeys[gvr.RowIndex].Values[1].ToString();
string OrderID = gvMyGridView.DataKeys[gvr.RowIndex].Values[2].ToString();

インデックスの代わりにキー名を使用して、次のDataKeyNamesようにコレクションから値を取得することもできます。

string ProductID = gvMyGridView.DataKeys[gvr.RowIndex].Values["ProductID"].ToString();
string ItemID = gvMyGridView.DataKeys[gvr.RowIndex].Values["ItemID"].ToString();
string OrderID = gvMyGridView.DataKeys[gvr.RowIndex].Values["OrderID"].ToString();
于 2014-10-14T09:39:21.757 に答える
5

あなたはこれを行うことができます:

string id = GridName.DataKeys[Convert.ToInt32(e.CommandArgument)].Value.ToString();
于 2012-08-08T17:15:44.593 に答える
3

ボタン上:

CommandArgument='<%# Eval("myKey")%>'

サーバーイベントについて

e.CommandArgument
于 2015-07-22T11:33:08.743 に答える