我有常规的asp.net gridview,我想在每一行中启用editmode,也没有editbutton(如excel网格)。 编辑数据我想通过点击网格外的“发布”按钮(整个网格的一个按钮)保存到我的数据库。 我怎么能达到它?
答案 0 :(得分: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
}
我就是这样做的。您也可以查看Real World Grids但我没有太多运气,因为如果文本框为空,我总是会收到错误。然而,这应该是“智能”足以只更新已经更改的行,但同样,我没有太多运气这样做。希望这有帮助!