gridview如何实现后台插入模板列,加入dropdownlist控件?

解决方案 »

  1.   

    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;public partial class Default2 : System.Web.UI.Page
    {
      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 = "<B>新加的</B>";
              container.Controls.Add(lc);
              break;
            case DataControlRowType.DataRow:
              DropDownList drr = new DropDownList();
              drr.Items.Add(new ListItem("AA", "a"));
              drr.Items.Add(new ListItem("BB", "b"));
              drr.Items.Add(new ListItem("CC", "c"));
              //drr.DataBinding += new EventHandler(this.drr_DataBinding);          container.Controls.Add(drr);
              break;
            default:
              break;
          }
        }    private void drr_DataBinding(Object sender, EventArgs e)
        {      //也可以进行数据的绑定在这里执行
        }  }  void Page_Load(Object sender, EventArgs e)
      {    if (!IsPostBack)
        {
          TemplateField customField = new TemplateField();
          customField.ItemTemplate = new GridViewTemplate(DataControlRowType.DataRow, "Title");
          GridView1.Columns.Add(customField);
        }  }}
      

  2.   

    一个拷贝就能运行的例子<%@ 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>例子</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>
      

  3.   

    比较有用的是
    protected void GridView1_RowDataBound( object sender, GridViewRowEventArgs e )这个方法里面的东西,可以访问数据的其它字段,可以设置下拉的默认值等,