打印

[asp.net教程] 一次编辑 gridview 的所有行

一次编辑 gridview 的所有行

在平时的实际项目中,为了减少往返提交数据,可以一次编辑 gridview 的所有行,这样大大提高用户使用产品的体验。下面就讲解何一次编辑 gridview 的所有数据行。在下面的例子中,数据库使用《asp.net 2.0应用开发技术》一书中site\app_data\下的 aspnet20book.mdb 数据库。例子中的数据更新方式使用 sqldatasource 数据源控件的updatecommand属性,但此方法同样适用于存储过程,sql 语句等。
   
   
  c#
   
  <%@ page language="c#" debug="true" %>
  <!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd">
  <script runat="server">
  string[] classnamearray = { "大学", "中学", "高中" };
   
  //初始化原来的值
  protected void gridview1_rowdatabound(object sender, gridviewroweventargs e)
  {
   if (e.row.rowtype == datacontrolrowtype.datarow)
   {
   system.data.datarowview drv = (system.data.datarowview)e.row.dataitem;
   radiobuttonlist rbl = (radiobuttonlist)e.row.findcontrol("txtgender");
   if (rbl != null)
   {
   if ((bool)drv["gender"])
   {
   rbl.items.findbytext("男").selected = true;
   }
   else
   {
   rbl.items.findbytext("女").selected = true;
   }
   }
   
   dropdownlist ddl = (dropdownlist)e.row.findcontrol("txtclassname");
   if (ddl != null)
   {
   ddl.items.findbytext(drv["classname"].tostring()).selected = true;
   }
   }
  }
   
  // 初始化项目列表
  protected void gridview1_rowcreated(object sender, gridviewroweventargs e)
  {
   if (e.row.rowtype == datacontrolrowtype.datarow)
   {
   dropdownlist ddl = (dropdownlist)e.row.findcontrol("txtclassname");
   ddl.datasource = classnamearray;
   ddl.databind();
   }
  }
   
  //处理提交的数据
  protected void xianhuimeng_click(object sender, eventargs e)
  {
   foreach (gridviewrow gvr in gridview1.rows)
   {
   string tgender = ((radiobuttonlist)gvr.findcontrol("txtgender")).selectedvalue;
   sqldatasource1.updateparameters.add(new parameter("@title", typecode.string, ((textbox)gvr.findcontrol("txttitle")).text));
   sqldatasource1.updateparameters.add(new parameter("@gender", typecode.boolean, (tgender == "男" ? "true" : "false")));
   sqldatasource1.updateparameters.add(new parameter("@classname",
   typecode.string, ((dropdownlist)gvr.findcontrol("txtclassname")).selectedvalue));
   sqldatasource1.updateparameters.add(new parameter("@id", typecode.int32, gridview1.datakeys[gvr.dataitemindex].value.tostring()));
   sqldatasource1.update();
   sqldatasource1.updateparameters.clear();
   }
   response.redirect(request.urlreferrer.tostring());
  }
  </script>
   
  <html xmlns="http://www.w3.org/1999/xhtml">
  <head id="head1" runat="server">
  <title>同时编辑 gridview的 多行</title>
  </head>
  <body>
  <form id="form1" runat="server">
   <asp:gridview id="gridview1" runat="server" font-size="12px" cellpadding="3" autogeneratecolumns="false"
   datakeynames="id" datasourceid="sqldatasource1" onrowdatabound="gridview1_rowdatabound"
   onrowcreated="gridview1_rowcreated">
   <headerstyle backcolor="#ededed" />
   <columns>
   <asp:templatefield headertext="姓名">
   <itemtemplate>
   <asp:textbox id="txttitle" runat="server" text='<%#eval("title") %>'></asp:textbox>
   </itemtemplate>
   </asp:templatefield>
   <asp:templatefield headertext="性别">
   <itemtemplate>
   <asp:radiobuttonlist id="txtgender" runat="server" repeatcolumns="2">
   <asp:listitem text='男'></asp:listitem>
   <asp:listitem text='女'></asp:listitem>
   </asp:radiobuttonlist>
   </itemtemplate>
   </asp:templatefield>
   <asp:templatefield headertext="学历">
   <itemtemplate>
   <asp:dropdownlist id="txtclassname" runat="server">
   </asp:dropdownlist>
   </itemtemplate>
   </asp:templatefield>
   </columns>
   </asp:gridview>
   <asp:sqldatasource id="sqldatasource1" runat="server"
   connectionstring="provider=microsoft.jet.oledb.4.0;data source=|datadirectory|\aspnet20book.mdb;persist security info=true"
   providername="system.data.oledb" selectcommand="select * from [student]"
   updatecommand="update [student] set title = @title,gender = @gender,classname=@classname where id=@id">
   </asp:sqldatasource>
   <asp:button id="button1" runat="server" text="保存所有修改" onclick="xianhuimeng_click" />
  </form>
  </body>
  </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)); 的写法会有所区别。

TOP

返回顶部
AYBlue

Processed in 0.060658 second(s), 7 queries.

当前时区 GMT+8, 现在时间是 2009-1-10 11:31 京ICP备06054220号

清除 Cookies - 联系我们 - 163K.com - Archiver - WAP