ASP.NET 2.0 中动态添加 GridView 模板列

  动态添加列,关键是实现 ITemplate.InstantiateIn 方法。下面是一个添加 GridView 模板列的例子。

  C#代码

<%...@ Page Language="C#" %>
<%...@ Import Namespace="System.Data" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">...
  ICollection CreateDataSource()
  ...{
    DataTable dt = new DataTable();
    DataRow dr;
    dt.Columns.Add(new DataColumn("id", typeof(Int32)));
    dt.Columns.Add(new DataColumn("text", typeof(string)));
    for (int i = 0; i < 6; i++)
    ...{
      dr = dt.NewRow();
      dr[0] = i;
      dr[1] = "列表项目 " + i.ToString();
      dt.Rows.Add(dr);
    }
    DataView dv = new DataView(dt);
    return dv;
  }

  public class GridViewTemplate : ITemplate
  ...{
    private DataControlRowType templateType;
    private string columnName;

    public GridViewTemplate( DataControlRowType type, string colname )
    ...{
      templateType = type;
      columnName = colname;
    }

    public void InstantiateIn( System.Web.UI.Control container )
    ...{
      switch (templateType)
      ...{
        case DataControlRowType.Header:
          Literal lc = new Literal();
          lc.Text = columnName;         
          container.Controls.Add(lc);         
          break;
        case DataControlRowType.DataRow:
          DropDownList drr = new DropDownList();
          drr.ID = "dropdown";
          drr.AppendDataBoundItems = true;
          drr.Items.Add(new ListItem("-----请选择------",""));
          drr.Items.Add(new ListItem("AA", "a"));
          drr.Items.Add(new ListItem("BB", "b"));
          drr.Items.Add(new ListItem("CC", "c"));
          container.Controls.Add(drr);
          break;
        default:
         break;
      }
    }
  }
 
  protected void Page_Load(object sender, EventArgs e)
  ...{
    if (!IsPostBack)
    ...{
      TemplateField customField = new TemplateField();
      customField.ShowHeader = true;
      customField.HeaderTemplate = new GridViewTemplate(DataControlRowType.Header, "动态添加列");
      customField.ItemTemplate = new GridViewTemplate(DataControlRowType.DataRow, "");
      GridView1.Columns.Add(customField);
      GridView1.DataSource = CreateDataSource();
      GridView1.DataBind();
    }
  }

  protected void GridView1_RowDataBound( object sender, GridViewRowEventArgs e )
  ...{
    if (e.Row.RowType == DataControlRowType.DataRow)
    ...{
      //可以在这里访问数据库的其它字段的值,可以设置默认选择项,具体应用,看自己的发挥了。
      //下面只是例子,举一反三,不再费话了
      DataRowView gv = (DataRowView)e.Row.DataItem;
      int itemSeleted = Int32.Parse(gv.Row["id"].ToString()) > 3 ? 0 : Int32.Parse(gv.Row["id"].ToString());
      DropDownList dr = (DropDownList)e.Row.FindControl("dropdown");
      dr.SelectedIndex = itemSeleted;
    }
  }
</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" AutoGenerateColumns="False"
     OnRowDataBound="GridView1_RowDataBound">
    <Columns>
      <asp:BoundField HeaderText="标题"  DataField="text"/>
    </Columns>
  </asp:GridView>
</form>
</body>
</html>

时间: 2024-10-29 16:54:29

ASP.NET 2.0 中动态添加 GridView 模板列的相关文章

ASP.NET 2.0 中动态添加 GridView 模板列的例子

asp.net|动态|模板 动态添加列,关键是实现 ITemplate.InstantiateIn 方法.下面是一个添加 GridView 模板列的例子. C#代码 <%...@ Page Language="C#" %><%...@ Import Namespace="System.Data" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&qu

ASP.NET 2.0中动态修改页面标题

asp.net|动态|页面 在老外的站上看到解决的好方法,故简单编译之:在一个asp.net 的应用中,经常要动态修改页面的标题,一个典型的例子就是,在一个页面导航的控件中,希望用户点选哪一个连接,在页面的title里就显示相关的内容,举个例子,比如一个网站,有如下的网站架构:有图书分类,下面再有中国图书,外国图书分类,则一般可以用树形或者asp.net 2.0的新增加的导航栏控件(sitemap),来实现,比如 图书--->中国图书;图书---->外国图书等,而如果这个时候,能在页面的<

asp.net 向UpdatePaneel中动态添加DropDownList控件代码

asp教程.net 向updatepaneel中动态添加dropdownlist控件代码 //aspx文件中添加如上代码,showchildlist函数如下:   protected void showchildlist(object sender, eventargs e)   {   dropdownlist ddl_now = (dropdownlist)sender;   string sql = "select part_id,part_name from tb_parts where

ASP.NET 2.0中Gridview中数据操作技巧

Asp.net 2.0中新增的gridview控件,是十分强大的数据展示控件,在前面的 系列文章里,分别展示了其中很多的基本用法和技巧(详见<<ASP.NET 2.0中Gridview控件高级技巧>>.<<ASP.NET2.0利用Gridview实现 主从关系>>).在本文中,将继续探讨有关的技巧. 一.Gridview中的内容导出到Excel 在日常工作中,经常要将gridview中的内容导出到excel报表中去,在 asp.net 2.0中,同样可以很方

在ASP.NET 2.0中操作数据:在GridView控件中使用TemplateField

asp.net|控件|数据 导言     让我们花点时间在浏览器中来看看我们的成果.这时,你将看到一个表格, 表格中每一个记录都是一个雇员的信息,一共有四列:一个是雇员的姓, 一个是名字,一个是头衔,还有一个是他们的受雇日期.     就像你看到的那样,TemplateField由两个模板组成--一个ItemTemplate,它有一个Label控件,其Text属性被设置为FirstName数据字段的值:还有一个EditItemTemplate,它有一个TextBix控件,其Text属性也被设置为

在ASP.NET 2.0中操作数据之十二:在GridView控件中使用TemplateField_自学过程

导言 GridView是由一组字段(Field)组成的,它们都指定的了来自DataSource中的什么属性需要用到自己的输出呈现中.最简单的字段类型是BoundField,它仅将数据简单的显示为文本.其他的字段类型使用交互HTML元素(alternate HTML elements)来显示数据.比如说,CheckBoxField将被呈现为一个CheckBox,其选中状态由某特定数据字段的值来决定:ImageField则将某特定数据字段呈现为一个图片,当然,这个数据字段中应该放的是图片类型的数据.

ASP.NET 2.0中在gridview中使用DataFromatString的小技巧

asp.net|技巧 可能之前不少朋友也已经试过,但我是今天才遇到这个问题,翻查资料后才解决.主要是在asp.net 2.0中,如果要在绑定列中显示比如日期格式等,如果用下面的方法是显示不了的 <asp :BoundField DataField="CreationDate"       DataFormatString="{0:M-dd-yyyy}"       HeaderText="CreationDate"   /> 主要是由

asp.net 2.0中一次性更新所有GRIDVIEW的记录

asp.net 在asp.net 2.0中,gridview控件是十分不错的控件.有的时候,可能一个GRIDVIEW控件中的各行都是文本框,如何一次性更新所有修改过的记录呢?有两种方法,一种是使用sqldatasource来更新所有记录,但这个方法比较慢,因为每更新一条记录都要建立数据连接并执行updatecommand,会影响性能,但还是先来看下实现方法: <%@ Page Language="C#" %> <script runat="server&qu

asp.net 2.0中TREEVIEW中动态增加结点

asp.net|treeview|动态 在asp.net 2.0中,要动态从数据库中取出内容,动态增加结点,其实不难,比如以SQL SERVER 2000的PUBS数据库为例子,要以树型列表方式,取出作者,做为根结点,然后取出每位作者写过什么书,作为子结点,可以这样 <%@ Page Language="C#"%><%@ Import Namespace="System.Data"%><%@ Import Namespace="