我有常规的 asp.net gridview,我想在每一行中启用编辑模式,也没有编辑按钮(如 excel 网格)。我想通过单击网格外的“发布”按钮(一个按钮用于整个网格)将编辑的数据保存到我的数据库中。我怎样才能达到它?
问问题
6821 次
1 回答
2
要实现这一点,您将不得不为每一列使用 ItemTemplates,其中包含文本框作为控件。
ASP
<asp:TemplateField HeaderText="Heading Title" SortExpression="Heading Title">
<ItemTemplate>
<asp:TextBox ID="tbTextbox" runat="server" Width="65px" Text='<%# Bind("ColumnNameYouWantToView") %>'></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
正确设置后,您将需要发布按钮。您可以将其放在网格中或网格之外。我使用两者,但这里是网格内的一个作为页脚。
ASP
<asp:TemplateField>
<ItemTemplate>
<asp:Button ID="btnView" runat="server" Text="View" OnClick="btnView_Click" Width="40px" />
</ItemTemplate>
<FooterTemplate>
<asp:Button ValidationGroup="UPDATE" ID="btnUpdate" OnClick="btnUpdate_Click" runat="server" Text="Update" Width="50px"></asp:Button>
</FooterTemplate>
<FooterStyle HorizontalAlign="Center" VerticalAlign="Middle" Width="50px" />
</asp:TemplateField>
到目前为止,我发现最有效的是在您的按钮单击中使用 foreach 语句。这个想法的最大缺陷是它会更新每一行。它有效,但如果您一次只更改一行,它将更新所有行。我将寻呼机设置为 10,因此始终更新 10 行(除非您只是搜索一条记录并对其进行更新,否则仅更新该条记录)。
C#背后的代码
protected void btnUpdate_Click(object sender, EventArgs e)
{
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["databaseConnection"].ConnectionString);
conn.Open();
//finds the controls within the gridview and updates them
foreach (GridViewRow gvr in gvGridViewName.Rows)
{
string ID = (gvr.FindControl("lblId") as Label).Text.Trim();//finds the control in the gridview
string anotherControl = ((TextBox)gvr.FindControl("tbTextBox")).Text.Trim();//finds the textbox in the gridview
//Your update or insert statements
}
我就是这样做的。您也可以查看真实世界网格,但我没有太多运气,因为如果文本框为空,我总是会收到错误消息。然而,这应该足够“智能”来更新已更改的行,但同样,我没有太多运气这样做。希望这可以帮助!
于 2013-11-04T13:28:40.900 回答