我目前正在使用Visual Studio构建我的项目,并让它自动生成"编辑"按钮。我的Gridview允许通过搜索框进行搜索,一个页面最多只能处理10行。在第一次加载Gridview时,编辑按钮以及随附的更新和取消操作非常好。然而,一旦我点击一个新页面,当我试图点击编辑时,它就会触发这些错误(第二个错误是当我不知怎么地看到更新和取消按钮时):
The GridView 'ProjectTable' fired event RowEditing which wasn't handled.
The GridView 'ProjectTable' fired event RowCancelingEdit which wasn't handled.
发生了什么事?这是我的aspx页面:
<head runat="server">
<title></title>
<style>
.hiddencol
{
display: none;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="SearchBox" runat="server"></asp:TextBox>
<asp:DropDownList ID="SearchParameterList" runat="server">
<asp:ListItem Selected="True" Value="Project_Name">Project Name</asp:ListItem>
<asp:ListItem Value="Product">Product</asp:ListItem>
<asp:ListItem Value="Description">Description</asp:ListItem>
</asp:DropDownList>
<asp:Button ID="SearchButton" runat="server" Text="Search" OnClick="SearchButton_Click" />
<asp:Button ID="ClearButton" runat="server" OnClick="ClearButton_Click" Text="Clear" />
<br />
<br />
<asp:GridView ID="ProjectTable" runat="server" Font-Names="Verdana,Arial" Font-Size="12px" AutoGenerateColumns="False" AutoGenerateEditButton="True" DataSourceID="PopulateProjectTable" AllowPaging="True" OnPageIndexChanging="ProjectTable_PageIndexChanging>
<AlternatingRowStyle BackColor="#BFE4FF" />
<PagerStyle BorderColor="#CCCCCC" BorderStyle="Solid" BorderWidth="1px" />
<HeaderStyle Height="30px" BackColor="#6DC2FF" Font-Size="12px" BorderColor="#CCCCCC" BorderStyle="Solid" BorderWidth="1px" />
<RowStyle Height="20px" Font-Size="12px" BorderColor="#CCCCCC" BorderStyle="Solid" BorderWidth="1px" />
<Columns>
<asp:BoundField DataField="ProjID" HeaderText="ProjID" ItemStyle-CssClass="hiddencol" HeaderStyle-CssClass="hiddencol" SortExpression="ProjID" />
<asp:BoundField DataField="Project_Name" HeaderText="Project Name Value" ReadOnly="True" SortExpression="Project_Name" />
<asp:BoundField DataField="Product" HeaderText="Product" SortExpression="Product" ReadOnly="True" />
<asp:BoundField DataField="Product_Edit" HeaderText="Product (alternate)" SortExpression="Product_Edit" />
<asp:BoundField DataField="Description" HeaderText="Description" ReadOnly="True" SortExpression="Description" />
<asp:BoundField DataField="Description_Edit" HeaderText="Description (alternate)" SortExpression="Description_Edit" />
<asp:BoundField DataField="Comment" HeaderText="Comment Submission/Approval" SortExpression="Comment" />
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="PopulateProjectTable" runat="server"
ConnectionString="<%$ ConnectionStrings:ODSConnectionString %>"
SelectCommand="SELECT [Project_Name], [Product], [Product_Edit], [Description], [Description_Edit], [Comment], [ProjID] FROM [Pipeline_Detail]"
UpdateCommand="UPDATE [Pipeline_Detail] SET Product_Edit = @Product_Edit, Description_Edit= @Description_Edit, Comment = @Comment WHERE ProjID = @ProjID">
<UpdateParameters>
<asp:Parameter Name="ProjID"/>
<asp:Parameter Name="Product_Edit" Type="String"/>
<asp:Parameter Name="Description_Edit" Type="String"/>
<asp:Parameter Name="Comment" Type="String"/>
</UpdateParameters>
</asp:SqlDataSource>
</div>
</form>
下面是我的代码:
public partial class Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void SearchButton_Click(object sender, EventArgs e)
{
ProjectTable.PageIndex = 0;
ProjectTable.DataSourceID = null;
PopulateProjectTable.SelectCommand = "SELECT [Project_Name], [Product], [Product_Edit], [Description], [Description_Edit], [Comment], [ProjID] FROM [Pipeline_Detail] WHERE " + SearchParameterList.SelectedValue.ToString() + " LIKE '%" + SearchBox.Text + "%'";
ProjectTable.DataSource = PopulateProjectTable;
ProjectTable.DataBind();
}
protected void ClearButton_Click(object sender, EventArgs e)
{
ProjectTable.PageIndex = 0;
ProjectTable.DataSourceID = null;
PopulateProjectTable.SelectCommand = "SELECT [Project_Name], [Product], [Product_Edit], [Description], [Description_Edit], [Comment], [ProjID] FROM [Pipeline_Detail] WHERE Project_Name LIKE '%%'";
ProjectTable.DataSource = PopulateProjectTable;
ProjectTable.DataBind();
SearchBox.Text = "";
}
protected void ProjectTable_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
ProjectTable.PageIndex = e.NewPageIndex;
ProjectTable.DataSourceID = null;
PopulateProjectTable.SelectCommand = "SELECT [Project_Name], [Product], [Product_Edit], [Description], [Description_Edit], [Comment], [ProjID] FROM [Pipeline_Detail] WHERE " + SearchParameterList.SelectedValue.ToString() + " LIKE '%" + SearchBox.Text + "%'" ;
ProjectTable.DataSource = PopulateProjectTable;
ProjectTable.DataBind();
}
}
您需要实现这些事件。在标记中,您将"自动生成编辑"按钮设置为true,但从未实现"行内编辑"事件和"行内取消编辑"事件。将您的标记更新为:
<asp:GridView ID="ProjectTable" runat="server" Font-Names="Verdana,Arial" Font-Size="12px" AutoGenerateColumns="False" AutoGenerateEditButton="True" DataSourceID="PopulateProjectTable" AllowPaging="True" OnPageIndexChanging="ProjectTable_PageIndexChanging" OnRowEditing="ProjectTable_OnRowEditing" OnRowCancelingEdit="ProjectTable_OnRowCancellingEdit">
然后将该方法添加到代码后面:
protected void ProjectTable_OnRowEditing(object sender, GridViewEditEventArgs e)
{
}
protected void ProjectTable_OnRowCancellingEdit(object sender, GridViewCancelEditEventArgs e)
{
}