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

本文关键字:TemplateField 动态 Net 网格 视图 Asp | 更新日期: 2023-09-27 18:13:05

我有一个网格视图,它的前三列是手动创建的,我想在代码后面动态地添加剩余的列,另外,剩余的列必须包含其中的文本框。我该怎么做呢?我尝试了以下链接中的代码:如何以编程方式添加TemplateField通过使用它,我可以在列中添加文本框,但无法找到访问文本框

中的值的方法。
 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会丢失,有什么方法可以防止这种情况吗?

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

使用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;
    }