2011-10-18 13 views
4

GridViewコントロールを使用しています。このコントロールは、ユーティリティメソッドから返されたオブジェクトのListにバインドされています。 GridViewコントロールには、DataKeyとして設定された列の1つがあります。行がSelectedの場合、Selectedイベントハンドラが起動され、myGridView.SelectedDataKey.Valueを使用して、選択した行のDataKey列の値を取得できます。ASP.Net:編集および削除時にGridViewからDataKeyを取得する

ただし、行がEditedまたはDeletedの場合のイベントハンドラでは、問題の行のDataKey値を取得するメカニズムがないようです。これらのイベントハンドラのイベント引数パラメータには、GridViewの行のインデックスが含まれていますが、特にDataKey値の後です。

オブジェクトのリストが変更されている可能性があるため、ユーティリティメソッドを使用してオブジェクトのリストをイベントargパラメータから取得したインデックスとともに再取得することは選択できません。

どのようにすればいいですか?

TIA

答えて

16
protected void gridQuestion_RowDeleting(object sender, GridViewDeleteEventArgs e) 
{ 
    int id = (int)grdQuestions.DataKeys[e.RowIndex].Value;  
} 
+0

非常に上品です。インデックスでセルを指していないといいです。 –

0

は、[編集/削除イベントから返されたインデックス番号を使用してmanualy

String yourDataKey = GridView.DataKeys[e.NewSelectedIndex].Item["youfield"].tostring(); 
ここ
2
protected void btnDelete_Click(object sender, EventArgs e) 
{ 
try 
{ 
    int i; 
    Con.Open(); 
    cmd = new SqlCommand("USP_REGISTER", Con); 
    cmd.CommandType = CommandType.StoredProcedure; 
    cmd.Parameters.AddWithValue("@P_CH_ACTION_CODE", "D"); 
    for (i = 0; i <= grdApplication.Rows.Count - 1; i++) 
    { 
     CheckBox Ck=grdApplication.Rows[i].FindControl("cbItem") as CheckBox; 
     if (Ck.Checked==true) 
      { 
       int Id = (int)grdApplication.DataKeys[i].Values["INT_ID"]; 
       cmd.Parameters.AddWithValue("@P_INT_ID", Id); 
       SqlParameter StrOut = new SqlParameter(); 
       StrOut = cmd.Parameters.AddWithValue("@P_MSG_OUT", "out"); 
       StrOut.Direction = System.Data.ParameterDirection.Output; 
       cmd.ExecuteNonQuery(); 
       StrRetVal = (string)cmd.Parameters["@P_MSG_OUT"].Value; 
      } 
     Con.Close(); 
       } 

    } 
    catch (Exception ex) 
    { 
     Response.Write(ex.Message); 
    } 
} 
1

が私の解決策だ後、行を選択できます。

でgridviewはDataKeyNames = "id"を設定します。この方法は、行がdatakey

が、その後Grd_RowDataBoundに、このようなボタンに属性を追加する必要があります:

LinkButton Btn= (LinkButton)e.Row.FindControl("BtnDelete"); 
if (Btn!= null) 
{ 
     Btn.Attributes.Add("ROW_INDEX", e.Row.RowIndex.ToString()); 
} 

は、OnClickイベントでは、この使用:

int rowIndex= Convert.ToInt32(((LinkButton)sender).Attributes["ROW_INDEX"].ToString()); 
int id= Convert.ToInt32(Grd.DataKeys[rowIndex].Value); 

を、あなたが得ましたグリッドビューのポストバック内のdatakey値。

+0

もちろんこのソリューションは将来の査定者のためのものです – Bergkamp

関連する問題