动态添加列,关键是实现 itemplate.instantiatein 方法。下面是一个添加 gridview 模板列的例子。
c#代码

 <%...@ page language="c#" %>
<%...@ page language="c#" %>
 <%...@ import namespace="system.data" %>
<%...@ import namespace="system.data" %> <!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en"
<!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd">
 "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd">

 <script runat="server">...
<script runat="server">... icollection createdatasource()
  icollection createdatasource()
 ...{
  ...{ datatable dt = new datatable();
    datatable dt = new datatable(); datarow dr;
    datarow dr; dt.columns.add(new datacolumn("id", typeof(int32)));
    dt.columns.add(new datacolumn("id", typeof(int32))); dt.columns.add(new datacolumn("text", typeof(string)));
    dt.columns.add(new datacolumn("text", typeof(string))); for (int i = 0; i < 6; i++)
    for (int i = 0; i < 6; i++)
 ...{
    ...{ dr = dt.newrow();
      dr = dt.newrow(); dr[0] = i;
      dr[0] = i; dr[1] = "列表项目 " + i.tostring();
      dr[1] = "列表项目 " + i.tostring(); dt.rows.add(dr);
      dt.rows.add(dr); }
    } dataview dv = new dataview(dt);
    dataview dv = new dataview(dt); return dv;
    return dv; }
  }
 public class gridviewtemplate : itemplate
  public class gridviewtemplate : itemplate
 ...{
  ...{ private datacontrolrowtype templatetype;
    private datacontrolrowtype templatetype; private string columnname;
    private string columnname;
 public gridviewtemplate( datacontrolrowtype type, string colname )
    public gridviewtemplate( datacontrolrowtype type, string colname )
 ...{
    ...{ templatetype = type;
      templatetype = type; columnname = colname;
      columnname = colname; }
    }
 public void instantiatein( system.web.ui.control container )
    public void instantiatein( system.web.ui.control container )
 ...{
    ...{ switch (templatetype)
      switch (templatetype)
 ...{
      ...{ case datacontrolrowtype.header:
        case datacontrolrowtype.header: literal lc = new literal();
          literal lc = new literal(); lc.text = columnname;
          lc.text = columnname;           container.controls.add(lc);
          container.controls.add(lc);           break;
          break; case datacontrolrowtype.datarow:
        case datacontrolrowtype.datarow: dropdownlist drr = new dropdownlist();
          dropdownlist drr = new dropdownlist(); drr.id = "dropdown";
          drr.id = "dropdown"; drr.appenddatabounditems = true;
          drr.appenddatabounditems = true; drr.items.add(new listitem("-----请选择------",""));
          drr.items.add(new listitem("-----请选择------","")); drr.items.add(new listitem("aa", "a"));
          drr.items.add(new listitem("aa", "a")); drr.items.add(new listitem("bb", "b"));
          drr.items.add(new listitem("bb", "b")); drr.items.add(new listitem("cc", "c"));
          drr.items.add(new listitem("cc", "c")); container.controls.add(drr);
          container.controls.add(drr); break;
          break; default:
        default: break;
         break; }
      } }
    } }
  } 
   protected void page_load(object sender, eventargs e)
  protected void page_load(object sender, eventargs e)
 ...{
  ...{ if (!ispostback)
    if (!ispostback)
 ...{
    ...{ templatefield customfield = new templatefield();
      templatefield customfield = new templatefield(); customfield.showheader = true;
      customfield.showheader = true; customfield.headertemplate = new gridviewtemplate(datacontrolrowtype.header, "动态添加列");
      customfield.headertemplate = new gridviewtemplate(datacontrolrowtype.header, "动态添加列"); customfield.itemtemplate = new gridviewtemplate(datacontrolrowtype.datarow, "");
      customfield.itemtemplate = new gridviewtemplate(datacontrolrowtype.datarow, ""); gridview1.columns.add(customfield);
      gridview1.columns.add(customfield); gridview1.datasource = createdatasource();
      gridview1.datasource = createdatasource(); gridview1.databind();
      gridview1.databind(); }
    } }
  }
 protected void gridview1_rowdatabound( object sender, gridviewroweventargs e )
  protected void gridview1_rowdatabound( object sender, gridviewroweventargs e )
 ...{
  ...{ if (e.row.rowtype == datacontrolrowtype.datarow)
    if (e.row.rowtype == datacontrolrowtype.datarow)
 ...{
    ...{ //可以在这里访问数据库的其它字段的值,可以设置默认选择项,具体应用,看自己的发挥了。
      //可以在这里访问数据库的其它字段的值,可以设置默认选择项,具体应用,看自己的发挥了。 //下面只是例子,举一反三,不再费话了
      //下面只是例子,举一反三,不再费话了 datarowview gv = (datarowview)e.row.dataitem;
      datarowview gv = (datarowview)e.row.dataitem; int itemseleted = int32.parse(gv.row["id"].tostring()) > 3 ? 0 : int32.parse(gv.row["id"].tostring());
      int itemseleted = int32.parse(gv.row["id"].tostring()) > 3 ? 0 : int32.parse(gv.row["id"].tostring()); dropdownlist dr = (dropdownlist)e.row.findcontrol("dropdown");
      dropdownlist dr = (dropdownlist)e.row.findcontrol("dropdown"); dr.selectedindex = itemseleted;
      dr.selectedindex = itemseleted; }
    } }
  } </script>
</script>
 <html xmlns="http://www.w3.org/1999/xhtml">
<html xmlns="http://www.w3.org/1999/xhtml"> <head id="head1" runat="server">
<head id="head1" runat="server"> <title>gridview动态添加模板列的例子</title>
  <title>gridview动态添加模板列的例子</title> </head>
</head> <body>
<body> <form id="form1" runat="server">
<form id="form1" runat="server"> <asp:gridview id="gridview1" runat="server" autogeneratecolumns="false"
  <asp:gridview id="gridview1" runat="server" autogeneratecolumns="false" onrowdatabound="gridview1_rowdatabound">
     onrowdatabound="gridview1_rowdatabound"> <columns>
    <columns> <asp:boundfield headertext="标题"  datafield="text"/>
      <asp:boundfield headertext="标题"  datafield="text"/> </columns>
    </columns> </asp:gridview>
  </asp:gridview>  </form>
</form> </body>
</body> </html>
</html>
 
新闻热点
疑难解答
图片精选