GridView动态添加Templete项
        
        最近的碰到一个问题,就是GridView后台怎样动态添加Templete项。比方说,有个BankCardChangeManage.aspx页面,其中的GridView显示的要求是一些公用的项
    
最近的碰到一个问题,就是GridView后台怎样动态添加Templete项。比方说,有个BankCardChangeManage.aspx页面,其中的GridView显示的要求是一些公用的项,比如“用户ID,旧账号”等项,但又要根据传递的stype参数和用户的权限添加一些其他项。我是用模板类实现的。
模板类代码如下:

 Code
Code
1 namespace Nimeux.Web.UI
namespace Nimeux.Web.UI
2

 {
{
3 public class NimeuxTemplete : ITemplate
    public class NimeuxTemplete : ITemplate
4
 
     {
{
5 private string _colname;
        private string _colname;
6
7
 /**//// <summary>
        /**//// <summary>
8 /// 构造函数
        /// 构造函数
9 /// </summary>
        /// </summary>
10 /// <param name="colname">列的名字(对应数据库的字段)</param>
        /// <param name="colname">列的名字(对应数据库的字段)</param>
11 public NimeuxTemplete(string colname)
        public NimeuxTemplete(string colname)
12
 
         {
{
13 this._colname = colname;
            this._colname = colname;
14 }
        }
15
16
 /**//// <summary>
        /**//// <summary>
17 /// 实现接口ITemplate的方法
        /// 实现接口ITemplate的方法
18 /// </summary>
        /// </summary>
19 /// <param name="container"></param>
        /// <param name="container"></param>
20 /// <remarks>
        /// <remarks>
21 /// 1、new一个LiteralControl
        /// 1、new一个LiteralControl
22 /// 2、给LiteralControl加一个绑定事件
        /// 2、给LiteralControl加一个绑定事件
23 /// 3、把该控件加到容器控件集合里
        /// 3、把该控件加到容器控件集合里
24 /// </remarks>
        /// </remarks>
25 public void InstantiateIn(Control container)
        public void InstantiateIn(Control container)
26
 
         {
{
27 LiteralControl l = new LiteralControl();
            LiteralControl l = new LiteralControl();
28 l.DataBinding += new EventHandler(this.OnDataBinding);
            l.DataBinding += new EventHandler(this.OnDataBinding);
29 container.Controls.Add(l);
            container.Controls.Add(l);
30 }
        }
31
32 private void OnDataBinding(object sender, EventArgs e)
        private void OnDataBinding(object sender, EventArgs e)
33
 
         {
{
34 LiteralControl l = (LiteralControl)sender;
            LiteralControl l = (LiteralControl)sender;
35
36 // 得到l的容器(父亲)——GridViewRow
            // 得到l的容器(父亲)——GridViewRow
37 GridViewRow container = (GridViewRow)l.NamingContainer;
            GridViewRow container = (GridViewRow)l.NamingContainer;
38 // 通过列名(对应数据库的字段)给l赋值
            // 通过列名(对应数据库的字段)给l赋值
39 l.Text = ((DataRowView)container.DataItem)[_colname].ToString();
            l.Text = ((DataRowView)container.DataItem)[_colname].ToString();
40 }
        }
41 }
    }
42 }
}
然后,在页面中编写了一个私有方法如下:

 Code
Code
1
 /**//// <summary>
/**//// <summary>
2 /// 根据不同参数显示不部内容
        /// 根据不同参数显示不部内容
3 /// </summary>
        /// </summary>
4 /// <param name="flag">标记参数</param>
        /// <param name="flag">标记参数</param>
5 private void Show(int flag)
        private void Show(int flag)
6
 
         {
{
7 if (flag == 2)
            if (flag == 2)
8
 
             {
{
9 TemplateField tf1 = new TemplateField();
                TemplateField tf1 = new TemplateField();
10 NimeuxTemplete nt1 = new NimeuxTemplete("OldCard");
                NimeuxTemplete nt1 = new NimeuxTemplete("OldCard");
11 tf1.HeaderText = "旧卡号";
                tf1.HeaderText = "旧卡号";
12 tf1.ItemTemplate = nt1;
                tf1.ItemTemplate = nt1;
13
14 TemplateField tf2 = new TemplateField();
                TemplateField tf2 = new TemplateField();
15 NimeuxTemplete nt2 = new NimeuxTemplete("NewCard");
                NimeuxTemplete nt2 = new NimeuxTemplete("NewCard");
16 tf2.HeaderText = "新卡号";
                tf2.HeaderText = "新卡号";
17 tf2.ItemTemplate = nt2;
                tf2.ItemTemplate = nt2;
18
19 this.gvFSBT.Columns.Add(tf1);
                this.gvFSBT.Columns.Add(tf1);
20 this.gvFSBT.Columns.Add(tf2);
                this.gvFSBT.Columns.Add(tf2);
21 }
            }
22 else
            else
23
 
             {
{
24 TemplateField tf1 = new TemplateField();
                TemplateField tf1 = new TemplateField();
25 NimeuxTemplete nt1 = new NimeuxTemplete("NewCard");
                NimeuxTemplete nt1 = new NimeuxTemplete("NewCard");
26 tf1.HeaderText = "卡号";
                tf1.HeaderText = "卡号";
27 tf1.ItemTemplate = nt1;
                tf1.ItemTemplate = nt1;
28
29 TemplateField tf2 = new TemplateField();
                TemplateField tf2 = new TemplateField();
30 NimeuxTemplete nt2 = new NimeuxTemplete("ChangeContent");
                NimeuxTemplete nt2 = new NimeuxTemplete("ChangeContent");
31 tf2.HeaderText = "登记内容";
                tf2.HeaderText = "登记内容";
32 tf2.ItemTemplate = nt2;
                tf2.ItemTemplate = nt2;
33
34 this.gvFSBT.Columns.Add(tf1);
                this.gvFSBT.Columns.Add(tf1);
35 this.gvFSBT.Columns.Add(tf2);
                this.gvFSBT.Columns.Add(tf2);
36 }
            }
37 }
        }
这样根据flag传递的参数就可以显示不同的内容了。GridView通过模板动态添加项应用非常多,我这里只是根据一些要求做简单的应用罢了。为了使自己的博客充实一点,就写了下了。
模板类代码如下:

 Code
Code1
 namespace Nimeux.Web.UI
namespace Nimeux.Web.UI2


 {
{3
 public class NimeuxTemplete : ITemplate
    public class NimeuxTemplete : ITemplate4

 
     {
{5
 private string _colname;
        private string _colname;6

7

 /**//// <summary>
        /**//// <summary>8
 /// 构造函数
        /// 构造函数9
 /// </summary>
        /// </summary>10
 /// <param name="colname">列的名字(对应数据库的字段)</param>
        /// <param name="colname">列的名字(对应数据库的字段)</param>11
 public NimeuxTemplete(string colname)
        public NimeuxTemplete(string colname)12

 
         {
{13
 this._colname = colname;
            this._colname = colname;14
 }
        }15

16

 /**//// <summary>
        /**//// <summary>17
 /// 实现接口ITemplate的方法
        /// 实现接口ITemplate的方法18
 /// </summary>
        /// </summary>19
 /// <param name="container"></param>
        /// <param name="container"></param>20
 /// <remarks>
        /// <remarks>21
 /// 1、new一个LiteralControl
        /// 1、new一个LiteralControl22
 /// 2、给LiteralControl加一个绑定事件
        /// 2、给LiteralControl加一个绑定事件23
 /// 3、把该控件加到容器控件集合里
        /// 3、把该控件加到容器控件集合里24
 /// </remarks>
        /// </remarks>25
 public void InstantiateIn(Control container)
        public void InstantiateIn(Control container)26

 
         {
{27
 LiteralControl l = new LiteralControl();
            LiteralControl l = new LiteralControl();28
 l.DataBinding += new EventHandler(this.OnDataBinding);
            l.DataBinding += new EventHandler(this.OnDataBinding);29
 container.Controls.Add(l);
            container.Controls.Add(l);30
 }
        }31

32
 private void OnDataBinding(object sender, EventArgs e)
        private void OnDataBinding(object sender, EventArgs e)33

 
         {
{34
 LiteralControl l = (LiteralControl)sender;
            LiteralControl l = (LiteralControl)sender;35

36
 // 得到l的容器(父亲)——GridViewRow
            // 得到l的容器(父亲)——GridViewRow37
 GridViewRow container = (GridViewRow)l.NamingContainer;
            GridViewRow container = (GridViewRow)l.NamingContainer;38
 // 通过列名(对应数据库的字段)给l赋值
            // 通过列名(对应数据库的字段)给l赋值39
 l.Text = ((DataRowView)container.DataItem)[_colname].ToString();
            l.Text = ((DataRowView)container.DataItem)[_colname].ToString();40
 }
        }41
 }
    }42
 }
}然后,在页面中编写了一个私有方法如下:

 Code
Code1

 /**//// <summary>
/**//// <summary>2
 /// 根据不同参数显示不部内容
        /// 根据不同参数显示不部内容3
 /// </summary>
        /// </summary>4
 /// <param name="flag">标记参数</param>
        /// <param name="flag">标记参数</param>5
 private void Show(int flag)
        private void Show(int flag)6

 
         {
{7
 if (flag == 2)
            if (flag == 2)8

 
             {
{9
 TemplateField tf1 = new TemplateField();
                TemplateField tf1 = new TemplateField();10
 NimeuxTemplete nt1 = new NimeuxTemplete("OldCard");
                NimeuxTemplete nt1 = new NimeuxTemplete("OldCard");11
 tf1.HeaderText = "旧卡号";
                tf1.HeaderText = "旧卡号";12
 tf1.ItemTemplate = nt1;
                tf1.ItemTemplate = nt1;13

14
 TemplateField tf2 = new TemplateField();
                TemplateField tf2 = new TemplateField();15
 NimeuxTemplete nt2 = new NimeuxTemplete("NewCard");
                NimeuxTemplete nt2 = new NimeuxTemplete("NewCard");16
 tf2.HeaderText = "新卡号";
                tf2.HeaderText = "新卡号";17
 tf2.ItemTemplate = nt2;
                tf2.ItemTemplate = nt2;18

19
 this.gvFSBT.Columns.Add(tf1);
                this.gvFSBT.Columns.Add(tf1);20
 this.gvFSBT.Columns.Add(tf2);
                this.gvFSBT.Columns.Add(tf2);21
 }
            }22
 else
            else23

 
             {
{24
 TemplateField tf1 = new TemplateField();
                TemplateField tf1 = new TemplateField();25
 NimeuxTemplete nt1 = new NimeuxTemplete("NewCard");
                NimeuxTemplete nt1 = new NimeuxTemplete("NewCard");26
 tf1.HeaderText = "卡号";
                tf1.HeaderText = "卡号";27
 tf1.ItemTemplate = nt1;
                tf1.ItemTemplate = nt1;28

29
 TemplateField tf2 = new TemplateField();
                TemplateField tf2 = new TemplateField();30
 NimeuxTemplete nt2 = new NimeuxTemplete("ChangeContent");
                NimeuxTemplete nt2 = new NimeuxTemplete("ChangeContent");31
 tf2.HeaderText = "登记内容";
                tf2.HeaderText = "登记内容";32
 tf2.ItemTemplate = nt2;
                tf2.ItemTemplate = nt2;33

34
 this.gvFSBT.Columns.Add(tf1);
                this.gvFSBT.Columns.Add(tf1);35
 this.gvFSBT.Columns.Add(tf2);
                this.gvFSBT.Columns.Add(tf2);36
 }
            }37
 }
        }这样根据flag传递的参数就可以显示不同的内容了。GridView通过模板动态添加项应用非常多,我这里只是根据一些要求做简单的应用罢了。为了使自己的博客充实一点,就写了下了。
 
                     
                    
                 
                    
                 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号