批量获取DataGrid控件模板列中的数据

分类: asp.net技巧   出处:iocblog整理  更新时间:2008-10-21   添加到收藏  


  在datagrid中一般只能单个获取每一行的数据,若要批量获取datagrid控件中的数据必须对每一个模板列的控件进行扫描,获取其中的数据。
  
  我本想做的程序是根据不同的行数,由用户一次输入若干数据,提交后系统自动获取批量数据的程序。
  
  以下程序简单表达了需要实现的功能
  
  test.aspx
  
  ..........
  
  <asp:datagrid id="dgresult" runat="server" bordercolor="#deba84" borderstyle="none" cellspacing="2"
  borderwidth="1px" backcolor="#deba84" cellpadding="3" autogeneratecolumns="false">
  <footerstyle forecolor="#8c4510" backcolor="#f7dfb5"></footerstyle>
  <selecteditemstyle font-bold="true" forecolor="white" backcolor="#738a9c"></selecteditemstyle>
  <itemstyle forecolor="#8c4510" backcolor="#fff7e7"></itemstyle>
  <headerstyle font-bold="true" forecolor="white" backcolor="#a55129"></headerstyle>
  <columns>
  <asp:boundcolumn datafield="id" headertext="列号"></asp:boundcolumn>
  <asp:templatecolumn headertext="列名">
  <itemtemplate>
  <asp:textbox runat="server" enabled="true" width="50" id="col"></asp:textbox>
  </itemtemplate>
  </asp:templatecolumn>
  <asp:templatecolumn headertext="整数精度">
  <itemtemplate>
  <asp:textbox runat="server" enabled="true" id="textbox1" width="50">20</asp:textbox>
  </itemtemplate>
  </asp:templatecolumn>
  <asp:templatecolumn headertext="小数点精度">
  <itemtemplate>
  <asp:textbox runat="server" enabled="true" id="textbox2" width="50">10</asp:textbox>
  </itemtemplate>
  </asp:templatecolumn>
  </columns>
  <pagerstyle horizontalalign="center" forecolor="#8c4510" mode="numericpages"></pagerstyle>
  
  </asp:datagrid>
  <asp:button id="btnok" runat="server" text="提交"></asp:button>
  ......
  
  test.aspx.cs
  
  private void page_load(object sender, system.eventargs e)
  {
  // 在此处放置用户代码以初始化页面
  if(!ispostback)
  mfbind(datasource());
  }
  
  private ilist datasource()
  {
  datatable dt=new datatable();
  datacolumn dc=new datacolumn();
  dc.columnname="id";
  dc.datatype=system.type.gettype("system.int32");
  dc.readonly=true;
  dc.unique=true;
  dc.autoincrement=true;
  dc.autoincrementseed=0;
  dc.autoincrementstep=1;
  dt.columns.add(dc);
  
  dc=new datacolumn();
  dc.columnname="列名称";
  dc.datatype=system.type.gettype("system.string");
  dt.columns.add(dc);
  
  for(int i=0;i<10;i++)
  {
  datarow dr=dt.newrow();
  dr[1]=i;
  dt.rows.add(dr);
  }
  session["source"] = dt;
  return dt.defaultview;
  }
  private void mfbind(ilist dv)
  {
  this.dgresult.datasource=(dataview)dv;
  this.dgresult.databind();
  }
  private void btnok_click(object sender, system.eventargs e)
  {
  //string tmpa=dgresult__ctl2_col1.text;
  textbox txt;
  arraylist marr=new arraylist();
  for(int i=0;i<10;i++)[来源 www.iocblog.net]
  {
  txt=new textbox();
  txt=(textbox)dgresult.items[i].findcontrol("col");
  marr.add(txt.text);
  }
  for(int i=0;i<marr.count;i++)
  this.lblproblem.text+=marr[i].tostring()+" ; ";
  
  }
  
  其实这样的程序有共通性,通过datagrid控件可以对数据进行批量处理,特别是对删除数据等操作的过程中使用起来及其方便快捷,只要将程序的模板列中的textbox控件改为checkbox控件或者dropdownlist控件,扫描所有的子控件就可以实现对数据的批量快速删除、修改等操作。[来源 www.iocblog.net]


Tag: DataGrid