具有动态生成的TemplateField列的Asp.Net网格视图

时间:2015-09-17 11:36:34

标签: c# asp.net gridview

我有一个网格视图,它的前三列是手动创建的,我想在代码后面动态添加剩余的列,其余的列必须包含文本框。我该怎么做? 我尝试了以下链接中的代码: How to add TemplateField programmatically 通过使用这个我可以在列中添加文本框,但无法找到一种方法来访问文本框中的值

 public class AddTemplateToGridView : ITemplate
{
    ListItemType _type;
    string _colName,status;
    int i = 0;


public AddTemplateToGridView(ListItemType type, string colname,string stat)
    {
        _type = type;

        _colName = colname;
        status = stat;
    }
    public AddTemplateToGridView()
    {

    }
    void ITemplate.InstantiateIn(System.Web.UI.Control container)
    {
        switch (_type)
        { 

            case ListItemType.Item:
                TextBox txt = new TextBox();
                txt.ID =id;
                if (status == "havevalue")
                {
                    txt.DataBinding += new EventHandler(ht_DataBinding);
                }

                container.Controls.Add(txt);
                break;
        }

    }

这是我添加文本框的代码。我可以为每个文本框添加不同的ID吗?当我点击另一个按钮时,我发现id会丢失,有没有办法阻止这个?

1 个答案:

答案 0 :(得分:0)

使用DataItemIndex添加唯一ID:

private void tb_DataBinding(object sender, EventArgs e)
    {
        TextBox tb = (TextBox)sender;
        GridViewRow container = (GridViewRow)tb.NamingContainer;

        object dataValue = DataBinder.Eval(container.DataItem, columnName, GetFormat());
        if (dataValue != DBNull.Value)
            tb.Text = dataValue.ToString();

        tb.ID = columnName + container.DataItemIndex;
    }