ASP.NET2.0中给GridView动态添加模板列并自动绑定数据

goldentime 发表于 2007-12-13 16:43:00

在孟子E章上看了一下,但是他的数据是不能自动绑定上去的,需要再RowDataBind事件里面处理。
改进了一下。可以指定datafield,让其自动绑定上去。
对于TextBox在InstantiateIn中增加事件:
tb.DataBinding += new EventHandler(tb_DataBinding);
然后在事件函数tb_DataBinding里面:
tb.Text = ((DataRowView)container.DataItem)[dataField].ToString();
这样GV就可以自动绑定到他的DataSource对应的DataTable中列dataField对应的数据了。

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

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

    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:
                Label lbl = new Label();
                lbl.ID = container.ClientID;
                lbl.DataBinding += new EventHandler(lbl_DataBinding);
                container.Controls.Add(lbl);
                break;
            default:
                break;
        }
    }
    private void lbl_DataBinding(object sender, EventArgs e)
    {
        Label lbl = (Label)sender;
        lbl.Width = Unit.Percentage(100);
        GridViewRow container = (GridViewRow)lbl.NamingContainer;
        lbl.Text = ((DataRowView)container.DataItem)[dataField].ToString();
        lbl.Width = Unit.Pixel(70);
        lbl.Style.Add("TEXT-ALIGN", "right");

    }

}



发表评论:

    昵称:
    密码: (游客无须输入密码)
    主页:
    标题:


日  历

栏目分类

最新文章

最新回复

最新留言

用户登陆

博客搜索

博客信息

站内链接


返回页顶
Powered by Oblog.