您的位置:首页 > 编程语言 > ASP

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

2008-03-11 11:57 579 查看
 
动态添加列,关键是实现 ITemplate.InstantiateIn 方法。下面是一个添加 GridView 模板列的例子。
C#代码




<%...@ Page Language="C#" %>




<%...@ Import Namespace="System.Data" %>




 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">






...


  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;


    }


  }













  GridView动态添加模板列的例子











  

     OnRowDataBound="GridView1_RowDataBound">


    


      


    



   













 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: