一次编辑GridView中的所有数据

 

在平时的实际项目中,为了减少往返提交数据,可以一次编辑 GridView 的所有行,这样大大提高用户使用产品的体验。下面就讲解何一次编辑 GridView 的所有数据行。在下面的例子中,数据库使用《ASP.NET 2.0应用开发技术》一书中Site/App_Data/下的 ASPNET20Book.mdb 数据库。例子中的数据更新方式使用 SqlDataSource 数据源控件的UpdateCommand属性,但此方法同样适用于存储过程,SQL 语句等。

 

        C# 

  1. <%@ Page Language="C#" Debug="true" %>
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <script runat="server">
  4. string[] ClassNameArray = { "大学""中学""高中" };
  5. //初始化原来的值
  6. protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
  7. {    
  8.   if (e.Row.RowType == DataControlRowType.DataRow)
  9.   {
  10.     System.Data.DataRowView drv = (System.Data.DataRowView)e.Row.DataItem;
  11.     RadioButtonList rbl = (RadioButtonList)e.Row.FindControl("txtGender");
  12.     if (rbl != null)
  13.     {
  14.       if ((bool)drv["Gender"])
  15.       {
  16.         rbl.Items.FindByText("男").Selected = true;
  17.       }
  18.       else
  19.       {
  20.         rbl.Items.FindByText("女").Selected = true;
  21.       }
  22.     }
  23.     DropDownList ddl = (DropDownList)e.Row.FindControl("txtClassName");
  24.     if (ddl != null)
  25.     {
  26.       ddl.Items.FindByText(drv["ClassName"].ToString()).Selected = true;
  27.     }
  28.   }
  29. }
  30. // 初始化项目列表
  31. protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
  32. {    
  33.   if (e.Row.RowType == DataControlRowType.DataRow)
  34.   {
  35.     DropDownList ddl = (DropDownList)e.Row.FindControl("txtClassName");
  36.     ddl.DataSource = ClassNameArray;
  37.     ddl.DataBind();
  38.   }
  39. }
  40. //处理提交的数据
  41. protected void XianhuiMeng_Click(object sender, EventArgs e)
  42. {
  43.   foreach (GridViewRow gvr in GridView1.Rows)
  44.   {
  45.     string tGender = ((RadioButtonList)gvr.FindControl("txtGender")).SelectedValue;
  46.     SqlDataSource1.UpdateParameters.Add(new Parameter("@Title", TypeCode.String, ((TextBox)gvr.FindControl("txtTitle")).Text));
  47.     SqlDataSource1.UpdateParameters.Add(new Parameter("@Gender", TypeCode.Boolean, (tGender == "男" ? "True" : "False")));
  48.     SqlDataSource1.UpdateParameters.Add(new Parameter("@ClassName"
  49.                    TypeCode.String, ((DropDownList)gvr.FindControl("txtClassName")).SelectedValue));
  50.     SqlDataSource1.UpdateParameters.Add(new Parameter("@id", TypeCode.Int32, GridView1.DataKeys[gvr.DataItemIndex].Value.ToString()));
  51.     SqlDataSource1.Update();
  52.     SqlDataSource1.UpdateParameters.Clear();
  53.   }
  54.   Response.Redirect(Request.UrlReferrer.ToString());
  55. }
  56. </script>

html

  1. <html xmlns="http://www.w3.org/1999/xhtml">
  2. <head id="Head1" runat="server">
  3. <title>同时编辑 GridView的 多行</title>
  4. </head>
  5. <body>
  6. <form id="form1" runat="server">
  7.   <asp:GridView ID="GridView1" runat="server" Font-Size="12px" CellPadding="3" AutoGenerateColumns="False"
  8.     DataKeyNames="id" DataSourceID="SqlDataSource1" OnRowDataBound="GridView1_RowDataBound"
  9.     OnRowCreated="GridView1_RowCreated">
  10.     <HeaderStyle BackColor="#EDEDED" />
  11.     <Columns>
  12.       <asp:TemplateField HeaderText="姓名">
  13.         <ItemTemplate>
  14.           <asp:TextBox ID="txtTitle" runat="server" Text='<%#Eval("Title") %>'></asp:TextBox>
  15.         </ItemTemplate>
  16.       </asp:TemplateField>
  17.       <asp:TemplateField HeaderText="性别">
  18.         <ItemTemplate>
  19.           <asp:RadioButtonList ID="txtGender" runat="server" RepeatColumns="2">
  20.             <asp:ListItem Text='男'></asp:ListItem>
  21.             <asp:ListItem Text='女'></asp:ListItem>
  22.           </asp:RadioButtonList>
  23.         </ItemTemplate>
  24.       </asp:TemplateField>
  25.       <asp:TemplateField HeaderText="学历">
  26.         <ItemTemplate>
  27.           <asp:DropDownList ID="txtClassName" runat="server">
  28.           </asp:DropDownList>
  29.         </ItemTemplate>
  30.       </asp:TemplateField>
  31.     </Columns>
  32.   </asp:GridView>
  33.   <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
  34.     ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|ASPNET20Book.mdb;Persist Security Info=True"
  35.     ProviderName="System.Data.OleDb" SelectCommand="SELECT * FROM [Student]" 
  36.     UpdateCommand="Update [Student] Set Title = @Title,Gender = @Gender,ClassName=@ClassName Where id=@id">
  37.   </asp:SqlDataSource>
  38.   <asp:Button ID="Button1" runat="server" Text="保存所有修改" OnClick="XianhuiMeng_Click" />
  39. </form>
  40. </body>
  41. </html>

    注意:对于SQL Server 数据库,参数名字不加@。另外注意:不同数据库类型和不同的数据源,UpdateCommand="Update [Student] Set Title = @Title,Gender = @Gender,ClassName=@ClassName Where id=@id"写法和SqlDataSource1.UpdateParameters.Add(new Parameter("@Title", TypeCode.String, ((TextBox)gvr.FindControl("txtTitle")).Text)); 的写法会有所区别。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值