如何解决网格视图中的 RowUpdating 事件未触发
我有一个网格视图,我想更新行中的数据。我写了一个 C# 代码,我注意到 RowUpdating 事件没有触发。 我在我的网格中使用模板字段。 RowCommand 事件工作正常,但是 RowUpdating 事件没有触发。 我应该怎么办?我需要你的帮助。
事件如下:
protected void GrdPeople_RowUpdating(object sender,GridViewUpdateEventArgs e)
{
try
{
sqlConnection con = new sqlConnection(strCon);
if (con.State == ConnectionState.Closed)
con.open();
sqlCommand com = new sqlCommand("InsertUpdatePerson",con);
com.CommandType = CommandType.StoredProcedure;
com.Parameters.AddWithValue("@pr_id",Convert.ToInt32(GrdPeople.DataKeys[e.RowIndex].Value.ToString()));
com.Parameters.AddWithValue("@pr_name",(GrdPeople.FooterRow.FindControl("txtNameFooter") as TextBox).Text.Trim());
com.Parameters.AddWithValue("@pr_gender",(GrdPeople.FooterRow.FindControl("rdoMaleFooter") as RadioButton).Checked);
com.Parameters.AddWithValue("@pr_nationality",(GrdPeople.FooterRow.FindControl("txtNationalityFooter") as TextBox).Text.Trim());
com.Parameters.AddWithValue("@pr_idn",(GrdPeople.FooterRow.FindControl("txtIDnoFooter") as TextBox).Text.Trim());
com.Parameters.AddWithValue("@pr_passport",(GrdPeople.FooterRow.FindControl("txtPassportFooter") as TextBox).Text.Trim());
com.Parameters.AddWithValue("@pr_resident",(GrdPeople.FooterRow.FindControl("rdoYesFooter") as RadioButton).Checked);
com.Parameters.AddWithValue("@pr_phone",(GrdPeople.FooterRow.FindControl("txtPhoneFooter") as TextBox).Text.Trim());
com.Parameters.AddWithValue("@pr_email",(GrdPeople.FooterRow.FindControl("txtEmailFooter") as TextBox).Text.Trim());
com.Parameters.Add(new sqlParameter("@ERR_MESSAGE",sqlDbType.NVarChar,255)).Direction = ParameterDirection.Output;
com.Parameters.Add(new sqlParameter("@ERR_NUMBER",sqlDbType.Int)).Direction = ParameterDirection.Output;
com.ExecuteNonQuery();
int ErrNo = int.Parse(com.Parameters["@ERR_NUMBER"].Value.ToString());
if (ErrNo != 0)
{
lblSuccess.Text = "Data saved successfully.";
GrdPeople.EditIndex = -1;
}
else
{
lblError.Text = com.Parameters["@ERR_MESSAGE"].Value.ToString();
}
}
catch (Exception ex)
{
lblSuccess.Text = "";
lblError.Text = ex.Message;
}
}
下面是asp页面的设计:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="ValidationGridView.Default" EnableEventValidation="false" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Table runat="server">
<asp:TableRow>
<asp:TableCell>
<asp:TextBox runat="server" ID="txtSearch" />
</asp:TableCell>
<asp:TableCell>
<asp:Button runat="server" ID="btnSearch" Text="Search" />
</asp:TableCell>
</asp:TableRow>
</asp:Table>
</div>
<div>
<asp:GridView ID="GrdPeople" runat="server" CellPadding="4" ForeColor="#333333"
GridLines="None" AutoGenerateColumns="false"
OnRowCommand="GrdPeople_RowCommand"
OnRowEditing="GrdPeople_RowEditing"
OnRowCancelingEdit="GrdPeople_RowCancelingEdit"
OnRowUpdating="GrdPeople_RowUpdating"
ShowFooter="true" DataKeyNames="pr_id">
<AlternatingRowStyle BackColor="White" ForeColor="#284775" />
<EditRowStyle BackColor="#999999" />
<FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
<HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
<RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
<SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
<SortedAscendingCellStyle BackColor="#E9E7E2" />
<SortedAscendingHeaderStyle BackColor="#506C8C" />
<SortedDescendingCellStyle BackColor="#FFFDF8" />
<SortedDescendingHeaderStyle BackColor="#6F8DAE" />
<Columns>
<asp:TemplateField HeaderText="Name">
<ItemTemplate>
<asp:Label runat="server" Text='<%# Bind("pr_name") %>' ID="lblName" />
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtName" Text='<%# Bind("pr_name") %>' runat="server" />
<asp:requiredFieldValidator ID="requiredFieldValidator1" runat="server" ControlTovalidate="txtName" ErrorMessage="Name is required." ForeColor="Red" Text="*" ValidationGroup="Fields" />
</EditItemTemplate>
<FooterTemplate>
<asp:TextBox runat="server" ID="txtNameFooter" />
<asp:requiredFieldValidator ID="requiredFieldValidator2" runat="server" ControlTovalidate="txtNameFooter" ErrorMessage="Name is required." ForeColor="Red" Text="*" ValidationGroup="FieldsFooter" />
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Gender">
<ItemTemplate>
<asp:Label Text='<%# Bind("pr_gender") %>' runat="server" ID="lblGender" />
</ItemTemplate>
<EditItemTemplate>
<asp:RadioButton ID="rdoMale" Text ="Male" Checked='<%# Bind("pr_gender_value") %>' GroupName="Gender" runat="server" />
<asp:RadioButton ID="rdoFemale" Text="Female" runat="server" GroupName="Gender" />
</EditItemTemplate>
<FooterTemplate>
<asp:RadioButton ID="rdoMaleFooter" Text="Male" checked="true" runat="server" GroupName="Gender" />
<asp:RadioButton ID="rdoFemaleFooter" Text="Female" runat="server" GroupName="Gender" />
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Nationality">
<ItemTemplate>
<asp:Label Text='<%# Bind("pr_nationality") %>' runat="server" ID="lblNationality" />
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtNationality" Text='<%# Bind("pr_nationality") %>' runat="server" />
<asp:requiredFieldValidator ID="requiredFieldValidator3" ControlTovalidate="txtNationality" runat="server" ErrorMessage="Nationality is required." ForeColor="Red" Text="*" ValidationGroup="Fields" />
</FooterTemplate>
</EditItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txtNationalityFooter" runat="server" />
<asp:requiredFieldValidator ID="requiredFieldValidator4" runat="server" ControlTovalidate="txtNationalityFooter" ErrorMessage="Nationality is required." ForeColor="Red" ValidationGroup="FieldsFooter" Text="*" />
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="ID Number">
<ItemTemplate>
<asp:Label Text='<%# Bind("pr_idn") %>' runat="server" ID="lblIDNo" />
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtIDNo" Text='<%# Bind("pr_idn") %>' runat="server" />
<asp:CustomValidator ID="cstIDNo" runat="server" Text="*" ControlTovalidate="txtIDNo" ForeColor="Red" ValidateEmptyText="True" ValidationGroup="Fields" />
</EditItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txtIDnoFooter" runat="server" />
<asp:CustomValidator ID="cstIDNoFooter" runat="server" Text="*" ControlTovalidate="txtIDnoFooter" ForeColor="Red" ValidateEmptyText="True" ValidationGroup="FieldsFooter" />
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Passport">
<ItemTemplate>
<asp:Label Text='<%# Bind("pr_passport") %>' runat="server" ID="lblPassport" />
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtPassport" Text='<%# Bind("pr_passport") %>' runat="server" />
<asp:requiredFieldValidator ID="requiredFieldValidator5" runat="server" ControlTovalidate="txtPassport" ErrorMessage="Passport is required." ForeColor="Red" ValidationGroup="Fields" Text="*" />
</EditItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txtPassportFooter" runat="server" />
<asp:requiredFieldValidator ID="requiredFieldValidator6" runat="server" ControlTovalidate="txtPassportFooter" ErrorMessage="Passport is required." ForeColor="Red" ValidationGroup="FieldsFooter" Text="*" />
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Resident">
<ItemTemplate>
<asp:Label Text='<%# Bind("pr_resident") %>' runat="server" ID="lblResident" />
</ItemTemplate>
<EditItemTemplate>
<asp:RadioButton ID="rdoYes" Text="Yes" Checked='<%# Bind("pr_resident_value") %>' GroupName="Resident" runat="server" />
<asp:RadioButton ID="rdoNo" Text="No" runat="server" GroupName="Resident" />
</EditItemTemplate>
<FooterTemplate>
<asp:RadioButton ID="rdoYesFooter" Text="Yes" Checked="true" GroupName="Resident" runat="server" />
<asp:RadioButton ID="rdoNoFooter" Text="No" runat="server" GroupName="Resident" />
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Phone">
<ItemTemplate>
<asp:Label Text='<%# Bind("pr_phone") %>' runat="server" ID="lblPhone" />
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtPhone" Text='<%# Bind("pr_phone") %>' runat="server" />
<asp:CustomValidator ID="cstPhone" runat="server" Text="*" ControlTovalidate="txtPhone" ForeColor="Red" ValidateEmptyText="True" ValidationGroup="Fields" />
</EditItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txtPhoneFooter" runat="server" />
<asp:CustomValidator ID="cstPhoneFooter" runat="server" Text="*" ControlTovalidate="txtPhoneFooter" ForeColor="Red" ValidateEmptyText="True" ValidationGroup="FieldsFooter" />
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Email">
<ItemTemplate>
<asp:Label Text='<%# Bind("pr_email") %>' runat="server" ID="lblEmail" />
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtEmail" Text='<%# Bind("pr_email") %>' runat="server" />
<asp:CustomValidator ID="cstemail" runat="server" Text="*" ControlTovalidate="txtEmail" ForeColor="Red" ValidateEmptyText="True" ValidationGroup="Fields" />
</EditItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txtEmailFooter" runat="server" />
<asp:CustomValidator ID="cstemailFooter" runat="server" Text="*" ControlTovalidate="txtEmailFooter" ForeColor="Red" ValidateEmptyText="True" ValidationGroup="FieldsFooter" />
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<asp:ImageButton runat="server" ImageUrl="~/icons/edit.png" CommandName="Edit" ToolTip="Edit" Width="20px" Height="20px" />
<asp:ImageButton runat="server" ImageUrl="~/icons/delete.png" CommandName="Delete" ToolTip="Delete" Width="20px" Height="20px" />
<asp:ImageButton runat="server" ImageUrl="~/icons/email.png" CommandName="Mail" ToolTip="Mail" Width="20px" Height="20px" />
</ItemTemplate>
<EditItemTemplate>
<asp:ImageButton runat="server" ImageUrl="~/icons/save.png" CommandName="Save" ToolTip="Save" Width="20px" Height="20px" ValidationGroup="Fields"/>
<asp:ImageButton runat="server" ImageUrl="~/icons/cancel.png" CommandName="Cancel" ToolTip="Cancel" Width="20px" Height="20px" />
</EditItemTemplate>
<FooterTemplate>
<asp:ImageButton runat="server" ID="btnInsert" ImageUrl="~/icons/add.png" ValidationGroup="FieldsFooter" CommandName="Insert" ToolTip="Insert" Width="20px" Height="20px" />
</FooterTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<br />
<asp:Label runat="server" ID="lblSuccess" ForeColor="Green" />
<br />
<asp:Label runat="server" ID="lblError" ForeColor="Red" />
</div>
<div>
<asp:ImageButton ID="btnImportExl" runat="server" ImageUrl="~/icons/excel.png" Width="40px" Height="40px" />
</div>
<div>
<asp:ValidationSummary ID="ValidationSummary1" runat="server" ForeColor="Red" ValidationGroup="Fields" />
</div>
</form>
</body>
</html>
我在上面添加了网格设计,以向您展示我如何设计它以及如何设置其属性。 谢谢。
解决方法
在您的 GridView
的 EditItemTemplate
中,您错过了一个带有 CommandName="Update"
的按钮,该按钮将触发 grdPeople_RowUpdating
事件。
<EditItemTemplate>
<asp:ImageButton runat="server" ImageUrl="~/icons/save.png" CommandName="Save" ToolTip="Save" Width="20px" Height="20px" ValidationGroup="Fields"/>
<asp:ImageButton runat="server" ImageUrl="~/icons/cancel.png" CommandName="Cancel" ToolTip="Cancel" Width="20px" Height="20px" />
</EditItemTemplate>
解决方案
将保存按钮 CommandName
的值从 CommandName="Save"
更改为 CommandName="Update"
。
<EditItemTemplate>
<asp:ImageButton runat="server" ImageUrl="~/icons/save.png" CommandName="Update" ToolTip="Save" Width="20px" Height="20px" ValidationGroup="Fields"/>
<asp:ImageButton runat="server" ImageUrl="~/icons/cancel.png" CommandName="Cancel" ToolTip="Cancel" Width="20px" Height="20px" />
</EditItemTemplate>
参考
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。