2011-10-18 2 views
4

GridView 컨트롤을 사용합니다.이 컨트롤은 유틸리티 메서드에서 반환 된 List 개체에 데이터 바인딩됩니다. GridView 컨트롤에는 DataKey로 설정된 열 중 하나가 있습니다. 행이 Selected 일 때 Selected 이벤트 핸들러를 실행하고 myGridView.SelectedDataKey.Value을 사용하여 선택한 행에 대한 DataKey 열의 값을 가져올 수 있습니다.ASP.Net : 편집 및 삭제시 GridView에서 DataKey 가져 오기

그러나 행이 Edited 또는 Deleted 일 때의 이벤트 처리기에는 문제가되는 행의 DataKey 값을 가져 오는 메커니즘이없는 것 같습니다. 이러한 이벤트 핸들러의 이벤트 인수 매개 변수에는 GridView에있는 행의 인덱스가 들어 있지만 DataKey 값 다음에 있습니다.

이벤트 목록 매개 변수에서 얻은 색인과 함께 유틸리티 메소드를 통해 오브젝트 목록을 다시 얻는 것은 오브젝트 목록이 변경되었을 수 있기 때문에 옵션이 아닙니다.

아무도 내가 이것을 할 수있는 방법을 말해 줄 수 있습니까?

TIA

답변

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

아주 고상한. 인덱스로 셀을 가리 키지 않는 것이 좋습니다. –

0

당신은 편집/삭제 이벤트에서 반환 된 인덱스 번호를 사용하여 수동으로 실시

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"를 설정합니다.

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

을 다음 OnClick 이벤트에서이 사용 :이 방법 행은 다음과 같이 버튼에 속성을 추가 Grd_RowDataBound에 datakey 다음

해야합니다

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

을 당신은있어 gridview의 포스트 백에서 datakey 값.

+0

물론이 솔루션은 향후 애용자를위한 것입니다. – Bergkamp

관련 문제