文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>GridView如何动态添加模板列TemplateField

GridView如何动态添加模板列TemplateField

时间:2010-11-07  来源:tiandong

1 实施原因:

因为在做一个MOSS WebPart控件时候,遇到一个问题,如何选择需要导出的数据列;

GridView的数据源是动态的,所以没有办法静态使用模板列,来选择导出的列;

之所以没有用BoundField的原因,是因为一列数据列中不能放入两个或两个以上的控件,

以及不能在表头加入相关控件。所以,最后,我采用动态添加模板列的方法解决这个问题,

欢迎大家测试和改善。

2、待改善问题:

a、如何控制模板列中子控件集合的UI布局,

b、HeaderTemplate区域不能对子控件进行数据绑定。

 

如图所示:

选择文件清单“Site_Menu”时候:

 

选择文件清单“Web 部件库”时候

 

二、代码结构

类对象的使用关系:

GridVeiw-->Column-->TemplateField-->Header/DataRow-->MyTemplateColumn-->ColumnField;

其中MyTemplateField继承ITemplate;

ControlField为MyTemplateField提供构造模板列的相关数据。

 

三、代码内容

1、MyTemplateColumn.cs,详情如下:

using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

namespace Test.WebControls.GridView.MyTemplateColumn
{
    public class MyTmeplateColumn:ITemplate
    {
        /// <summary>
        /// 委托
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public delegate void EventHandler(object sender, EventArgs e);
        /// <summary>
        /// 事件
        /// </summary>
        public event EventHandler eh;
        /// <summary>
        /// 模板列的类型
        /// </summary>
        private DataControlRowType templateType;

        /// <summary>
        /// 数据绑定列的标题
        /// </summary>
        private string HeaderText;
        /// <summary>
        /// 模板列控件对象的集合<控件ID, 控件对象>
        /// </summary>
        private System.Collections.Generic.Dictionary<string, ControlField> ControlsFieldList;

        public MyTmeplateColumn(DataControlRowType type, string headerText)
        {
            this.templateType = type;
            this.HeaderText = headerText;
        }

        public MyTmeplateColumn(DataControlRowType type, string headerText, System.Collections.Generic.Dictionary<string, ControlField> ControlsFieldList) 
        {
            this.templateType = type;
            this.HeaderText = headerText;
            this.ControlsFieldList = ControlsFieldList;
        }

        /// <summary>
        /// 进行数据绑定
        /// </summary>
        /// <param name="container"></param>
        public void InstantiateIn(System.Web.UI.Control container)
        {
            switch (templateType)
            {
                case DataControlRowType.Header:
                    {
                        if (this.ControlsFieldList != null && this.ControlsFieldList.Count > 0)
                        {
                            for (int i = 0; i < this.ControlsFieldList.Count; i++)
                            {
                                string ID = this.ControlsFieldList.Keys.ToArray()[i].ToString().Trim();
                                ControlField controlField = this.ControlsFieldList[ID];

                                // 执行数据绑定
                                System.Web.UI.Control control = controlField.UIControl;
                                if (control != null && controlField != null)
                                {
                                    //control.DataBinding += new System.EventHandler(ControlFieldDataBinding);
                                    container.Controls.Add(control);
                                }
                            }
                        }

                        Literal lc = new Literal();
                        lc.Text = this.HeaderText;
                        container.Controls.Add(lc);

                        break;
                    }
                case DataControlRowType.DataRow:
                    {

                        if (this.ControlsFieldList != null && this.ControlsFieldList.Count > 0)
                        {
                            for (int i = 0; i < this.ControlsFieldList.Count; i++)
                            {
                                string ID = this.ControlsFieldList.Keys.ToArray()[i].ToString().Trim();
                                ControlField controlField = this.ControlsFieldList[ID];

                                // 执行数据绑定
                                System.Web.UI.Control control = controlField.UIControl;
                                if (control != null && controlField != null)
                                {
                                    control.DataBinding += new System.EventHandler(ControlFieldDataBinding);
                                    container.Controls.Add(control);
                                }
                            }
                        }
                        break;
                    }
                default:
                    {
                        break;
                    }
        }
        }

        /// <summary>
                /// ControlField的对象进行数据绑定
        /// </summary>
        /// <param name="controlField"></param>
        public void ControlFieldDataBinding(object sender, EventArgs e)
        {
            GridViewRow container = null;
            ControlField controlField = null;

            string control_type = sender.GetType().Name;
            string control_id = "";
            switch (control_type)
            {
                case "Label":
                    {
                        control_id = (sender as Label).ID.Trim();
                        break;
                    }
                case "TextBox":
                    {
                        control_id = (sender as TextBox).ID.Trim();
                        break;
                    }
                case "LinkButton":
                    {
                        control_id = (sender as LinkButton).ID.Trim();
                        break;
                    }
                case "Button":
                    {
                        control_id = (sender as Button).ID.Trim();
                        break;
                    }
                case "DropDownList":
                    {
                        control_id = (sender as DropDownList).ID.Trim();
                        break;
                    }
                case "CheckBox":
                    {
                        control_id = (sender as CheckBox).ID.Trim();
                        break;
                    }
                case "RadioButton":
                    {
                        control_id = (sender as RadioButton).ID.Trim();
                        break;
                    }
            }
            if (control_id != "")
            {
                controlField = this.ControlsFieldList[control_id];
            }


            if (controlField != null)
            {
                // 转化子控件
                System.Collections.Generic.Dictionary<string, string> fields = null;// <property, key> = <服务器控件属性名称, 属性绑定数据字段>
                string property = "";//服务器控件属性名称
                string key = "";//属性绑定数据字段
                string value = ""; //临时变量
                //
                switch (controlField.ControlType)
                {
                    #region 按控件类别,进行数据绑定
                    case ControlTypeEnum.Label:
                        {
                            #region Label DataBinding
                            Label obj = controlField.UIControl as Label;
                            container = obj.NamingContainer as GridViewRow;

                            if (obj != null && container != null)
                            {
                                if (obj != null && controlField.Fields != null && controlField.Fields.Count > 0)
                                {
                                    fields = controlField.Fields;
                                    for (int i = 0; i < fields.Count; i++)
                                    {
                                        property = fields.Keys.ToArray()[i];
                                        if (property != null && property.Trim() != "")
                                        {
                                            key = fields[property];
                                            value = DataBinder.Eval(container.DataItem, key).ToString().Trim();
                                            switch (property.Trim().ToUpper())
                                            {
                                                case "TEXT":
                                                    {
                                                        obj.Text = value;
                                                        break;
                                                    }
                                                case "TOOLTIP":
                                                    {
                                                        obj.ToolTip = value;
                                                        break;
                                                    }
                                                case "ENABLED":
                                                    {
                                                        obj.Enabled = Convert.ToBoolean(value);
                                                        break;
                                                    }
                                                case "VISIBLE":
                                                    {
                                                        obj.Visible = Convert.ToBoolean(value);
                                                        break;
                                                    }
                                            }
                                        }
                                    }
                                }
                            }
                            break;
                            #endregion
                        }
                    case ControlTypeEnum.TextBox:
                        {
                            #region TextBox DataBinding
                            TextBox obj = controlField.UIControl as TextBox; //sender as TextBox;
                            container = obj.NamingContainer as GridViewRow;

                            if (obj != null && container != null)
                            {
                                if (obj != null && controlField.Fields != null && controlField.Fields.Count > 0)
                                {
                                    fields = controlField.Fields;
                                    for (int i = 0; i < fields.Count; i++)
                                    {
                                        property = fields.Keys.ToArray()[i];
                                        if (property != null && property.Trim() != "")
                                        {
                                            key = fields[property];
                                            value = DataBinder.Eval(container.DataItem, key).ToString().Trim();
                                            switch (property.Trim().ToUpper())
                                            {
                                                case "TEXT":
                                                    {
                                                        obj.Text = value;
                                                        break;
                                                    }
                                                case "TOOLTIP":
                                                    {
                                                        obj.ToolTip = value;
                                                        break;
                                                    }
                                                case "ENABLED":
                                                    {
                                                        obj.Enabled = Convert.ToBoolean(value);
                                                        break;
                                                    }
                                                case "VISIBLE":
                                                    {
                                                        obj.Visible = Convert.ToBoolean(value);
                                                        break;
                                                    }
                                            }
                                        }
                                    }
                                }
                            }
                            break;
                            #endregion
                        }
                    case ControlTypeEnum.LinkButton:
                        {
                            #region LinkButton DataBinding
                            LinkButton obj = controlField.UIControl as LinkButton;
                            container = obj.NamingContainer as GridViewRow;

                            if (obj != null && container != null)
                            {
                                if (obj != null && controlField.Fields != null && controlField.Fields.Count > 0)
                                {
                                    fields = controlField.Fields;
                                    for (int i = 0; i < fields.Count; i++)
                                    {
                                        property = fields.Keys.ToArray()[i];
                                        if (property != null && property.Trim() != "")
                                        {
                                            key = fields[property];
                                            value = DataBinder.Eval(container.DataItem, key).ToString().Trim();
                                            switch (property.Trim().ToUpper())
                                            {
                                                case "TEXT":
                                                    {
                                                        obj.Text = value;
                                                        break;
                                                    }
                                                case "TOOLTIP":
                                                    {
                                                        obj.ToolTip = value;
                                                        break;
                                                    }
                                                case "ENABLED":
                                                    {
                                                        obj.Enabled = Convert.ToBoolean(value);
                                                        break;
                                                    }
                                                case "VISIBLE":
                                                    {
                                                        obj.Visible = Convert.ToBoolean(value);
                                                        break;
                                                    }
                                                case "POSTBACKURL":
                                                    {
                                                        obj.PostBackUrl = value;
                                                        break;
                                                    }
                                            }
                                        }
                                    }
                                }
                            }
                            break;
                            #endregion
                        }
                    case ControlTypeEnum.Button:
                        {
                            #region Button DataBinding
                            Button obj = controlField.UIControl as Button;
                            container = obj.NamingContainer as GridViewRow;

                            if (obj != null && container != null)
                            {
                                if (obj != null && controlField.Fields != null && controlField.Fields.Count > 0)
                                {
                                    fields = controlField.Fields;
                                    for (int i = 0; i < fields.Count; i++)
                                    {
                                        property = fields.Keys.ToArray()[i];
                                        if (property != null && property.Trim() != "")
                                        {
                                            key = fields[property];
                                            value = DataBinder.Eval(container.DataItem, key).ToString().Trim();
                                            switch (property.Trim().ToUpper())
                                            {
                                                case "TEXT":
                                                    {
                                                        obj.Text = value;
                                                        break;
                                                    }
                                                case "TOOLTIP":
                                                    {
                                                        obj.ToolTip = value;
                                                        break;
                                                    }
                                                case "ENABLED":
                                                    {
                                                        obj.Enabled = Convert.ToBoolean(value);
                                                        break;
                                                    }
                                                case "VISIBLE":
                                                    {
                                                        obj.Visible = Convert.ToBoolean(value);
                                                        break;
                                                    }
                                                case "POSTBACKURL":
                                                    {
                                                        obj.PostBackUrl = value;
                                                        break;
                                                    }
                                            }
                                        }
                                    }
                                }
                            }
                            break;
                            #endregion\
                        }
                    case ControlTypeEnum.DropDownList:
                        {

                            break;
                        }
                    case ControlTypeEnum.CheckBox:
                        {
                            #region CheckBox DataBinding
                            CheckBox obj = controlField.UIControl as CheckBox;
                            container = obj.NamingContainer as GridViewRow;

                            if (obj != null && container != null)
                            {
                                if (obj != null && controlField.Fields != null && controlField.Fields.Count > 0)
                                {
                                    fields = controlField.Fields;
                                    for (int i = 0; i < fields.Count; i++)
                                    {
                                        property = fields.Keys.ToArray()[i];
                                        if (property != null && property.Trim() != "")
                                        {
                                            key = fields[property];
                                            value = DataBinder.Eval(container.DataItem, key).ToString().Trim();
                                            switch (property.Trim().ToUpper())
                                            {
                                                case "TEXT":
                                                    {
                                                        obj.Text = value;
                                                        break;
                                                    }
                                                case "TOOLTIP":
                                                    {
                                                        obj.ToolTip = value;
                                                        break;
                                                    }
                                                case "ENABLED":
                                                    {
                                                        obj.Enabled = Convert.ToBoolean(value);
                                                        break;
                                                    }
                                                case "VISIBLE":
                                                    {
                                                        obj.Visible = Convert.ToBoolean(value);
                                                        break;
                                                    }
                                                case "CHECKED":
                                                    {
                                                        obj.Checked = Convert.ToBoolean(value);
                                                        break;
                                                    }
                                            }
                                        }
                                    }
                                }
                            }
                            break;
                            #endregion
                        }
                    case ControlTypeEnum.RadioButton:
                        {
                            #region RadioButton DataBinding
                            RadioButton obj = controlField.UIControl as RadioButton;
                            container = obj.NamingContainer as GridViewRow;

                            if (obj != null && container != null)
                            {
                                if (obj != null && controlField.Fields != null && controlField.Fields.Count > 0)
                                {
                                    fields = controlField.Fields;
                                    for (int i = 0; i < fields.Count; i++)
                                    {
                                        property = fields.Keys.ToArray()[i];
                                        if (property != null && property.Trim() != "")
                                        {
                                            key = fields[property];
                                            value = DataBinder.Eval(container.DataItem, key).ToString().Trim();
                                            switch (property.Trim().ToUpper())
                                            {
                                                case "TEXT":
                                                    {
                                                        obj.Text = value;
                                                        break;
                                                    }
                                                case "TOOLTIP":
                                                    {
                                                        obj.ToolTip = value;
                                                        break;
                                                    }
                                                case "ENABLED":
                                                    {
                                                        obj.Enabled = Convert.ToBoolean(value);
                                                        break;
                                                    }
                                                case "VISIBLE":
                                                    {
                                                        obj.Visible = Convert.ToBoolean(value);
                                                        break;
                                                    }
                                                case "CHECKED":
                                                    {
                                                        obj.Checked = Convert.ToBoolean(value);
                                                        break;
                                                    }
                                            }
                                        }
                                    }
                                }
                            }
                            break;
                            #endregion
                        }
                    #endregion
                }
            }
           
        }
        
    }
}

相关阅读 更多 +
排行榜 更多 +
西安交大通

西安交大通

生活实用 下载
长江云通

长江云通

生活实用 下载
translatez

translatez

生活实用 下载