DataKeyValues ​​являются нулевыми в gridview

Вот мой gridview и событие, которое срабатывает, когда пользователь нажимает кнопку редактирования в строке. по какой-то причине мой datakey Значение сбой программы, говоря, что это ноль. я не уверен почему. DataKeyNames в gridview это именно то, что я хочу, 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 ответа

Решение

Если вы используете 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();
    }
}

Кнопка 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();

        }
Другие вопросы по тегам