1

我有常规的 asp.net gridview,我想在每一行中启用编辑模式,也没有编辑按钮(如 excel 网格)。我想通过单击网格外的“发布”按钮(一个按钮用于整个网格)将编辑的数据保存到我的数据库中。我怎样才能达到它?

4

1 回答 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 回答