2013-04-17 5 views
1

여기에 내 gridview과 행 내의 편집 버튼을 클릭 할 때 발생하는 이벤트가 있습니다. 어떤 이유로 내 datakey 값이 null이라는 프로그램을 크래시하고 있습니다. 왜 그런지 모르겠다. gridview의 DataKeyNames는 정확하게 내가 원하는대로 formID입니다. 당신이 볼 수 있듯이 gridview의 마지막 열이 나를 formID으로 보여주기 때문에 이것이 정확합니다. 그래서 내가 어디로 잘못 가고 있는지 전혀 모른다.GridKey에서 DataKeyValues가 null입니다.

<asp:GridView ID="gvHistory" runat="server" DataSourceID="ObjectDataSource" 
       AutoGenerateColumns="False" CellPadding="10" CellSpacing="5" 
       CssClass="userHistory" DataKeyNames="formID"> 
       <Columns> 
        <asp:BoundField DataField="clientName" HeaderText="User" /> 
        <asp:BoundField DataField="formName" HeaderText="Form" /> 
        <asp:BoundField DataField="dateCreated" HeaderText="Date Created" /> 
        <asp:BoundField DataField="dateRevised" HeaderText="Last Revision Date" /> 
        <asp:BoundField DataField="dateSubmitted" HeaderText="Date Submitted" /> 
        <asp:TemplateField ShowHeader="False"> 
         <ItemTemplate> 
          <asp:Button ID="edit" runat="server" CausesValidation="false" CommandName="editForm" 
           Text="Edit" OnDataBinding="btnEdit_DataBinding" OnClick="btnEdit_Click" /> 
         </ItemTemplate> 
        </asp:TemplateField> 
        <asp:TemplateField ShowHeader="False"> 
         <ItemTemplate> 
          <asp:Button ID="delete" runat="server" CausesValidation="false" CommandName="" 
           Text="Delete" OnDataBinding="btnDelete_DataBinding" /> 
         </ItemTemplate> 
        </asp:TemplateField> 
        <asp:BoundField DataField="formID" /> 
       </Columns> 
      </asp:GridView> 

protected void btnEdit_Click(object sender, System.EventArgs e) 
{ 
    Session["formID"] = gvHistory.SelectedDataKey.Value; 
    Label1.Text = Session["formID"].ToString(); 

} 

답변

1

그런 다음 당신은 단순히 Row_Command 이벤트를 사용할 수있는 항목 템플릿과 CommandName를 사용하는 경우, 당신은 버튼 클릭에 대한 별도의 핸들러를 만들 필요가 없습니다.

protected void grdView_RowCommand(object sender, GridViewCommandEventArgs e) 
{ 
    if (e.CommandName == "editForm") 
    { 
     GridViewRow row = (GridViewRow)(((Button)e.CommandSource).NamingContainer); 
     string value=grdView.DataKeys[row.RowIndex].Values["myDataKey"].ToString(); 
    } 
} 
+0

감사합니다. 이것은 완벽하게 작동했습니다. 죄송합니다. 나는이 질문을, 학기말에, 압력을 가해 야했다. 나는 이것을 얻을 수 있어야 했어. –

0

버튼 btn = (버튼) 송신자;

 GridViewRow gvrow = (GridViewRow)btn.NamingContainer; 
     if (gvrow != null) 
     { 
      //Get the Row Index 
      int rowIndex = gvrow.RowIndex; 
      //Get the DataKey value 
      Session["formID"] = gvHistory.DataKeys[rowIndex].Value.ToString(); 
      Label1.Text = Session["formID"].ToString(); 

     }