GridView中的DataKeyValues为null

时间:2013-04-17 20:09:33

标签: c# asp.net datakey

这是我的gridview以及当用户点击行中的编辑按钮时触发的事件。由于某种原因,我的datakey值使程序崩溃,说它为空。我不知道为什么。 gridview中的DataKeyNames正是我想要的,formID。这是正确的,因为正如您所见,gridview中的最后一列向我展示了formID,它显示得很好。所以我不知道我哪里出错了。

 <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();

}

2 个答案:

答案 0 :(得分:1)

如果您对项目模板使用CommandName,那么您只需使用Row_Command事件,就不需要为按钮点击创建单独的处理程序。

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();
    }
}

答案 1 :(得分: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();

        }