Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将组合框添加到asp.net未绑定的GridView_C#_Asp.net - Fatal编程技术网

C# 如何将组合框添加到asp.net未绑定的GridView

C# 如何将组合框添加到asp.net未绑定的GridView,c#,asp.net,C#,Asp.net,我想知道如何在运行时通过代码将ComboBox列添加到未绑定的GridView中。编程方式: 我使用了下面的类,但在过去用于实现ITemplate的下拉列表和复选框绑定 public class AddTemplateToGridView : ITemplate { String columnName; public AddTemplateToGridView(String colname) { columnName = colname; }

我想知道如何在运行时通过代码将ComboBox列添加到未绑定的GridView中。

编程方式:

我使用了下面的类,但在过去用于实现ITemplate的下拉列表和复选框绑定

public class AddTemplateToGridView : ITemplate
{
    String columnName;

    public AddTemplateToGridView(String colname)
    {
        columnName = colname;
    }

    void ITemplate.InstantiateIn(System.Web.UI.Control container)
    {
        if (columnName == "yourField")
        {
            ComboBox cb = new ComboBox();
            cb.DataBinding += new EventHandler(cb_DataBinding);
            container.Controls.Add(cb);
        }
    }

    void cb_DataBinding(object sender, EventArgs e)
    {
        ComboBox cb = (ComboBox)sender;
        GridViewRow container = (GridViewRow)cb.NamingContainer; 
        Object dataValue = DataBinder.Eval(container.DataItem, columnName); 
        if (dataValue != DBNull.Value) 
        {
            // Assign ComboBox vals if necessary
            ... = dataValue
        }
    }
}
通过在codebehind中声明GridView和TemplateField来使用:

GridView newGrid = new GridView();
TemplateField field = new TemplateField();
field.HeaderText = "columnName";
field.ItemTemplate = // some item template
field.EditItemTemplate = new AddTemplateToGridView("yourField");
newGrid.Columns.Add(field);
或声明:

希望这能有所帮助。

以编程方式:

我使用了下面的类,但在过去用于实现ITemplate的下拉列表和复选框绑定

public class AddTemplateToGridView : ITemplate
{
    String columnName;

    public AddTemplateToGridView(String colname)
    {
        columnName = colname;
    }

    void ITemplate.InstantiateIn(System.Web.UI.Control container)
    {
        if (columnName == "yourField")
        {
            ComboBox cb = new ComboBox();
            cb.DataBinding += new EventHandler(cb_DataBinding);
            container.Controls.Add(cb);
        }
    }

    void cb_DataBinding(object sender, EventArgs e)
    {
        ComboBox cb = (ComboBox)sender;
        GridViewRow container = (GridViewRow)cb.NamingContainer; 
        Object dataValue = DataBinder.Eval(container.DataItem, columnName); 
        if (dataValue != DBNull.Value) 
        {
            // Assign ComboBox vals if necessary
            ... = dataValue
        }
    }
}
通过在codebehind中声明GridView和TemplateField来使用:

GridView newGrid = new GridView();
TemplateField field = new TemplateField();
field.HeaderText = "columnName";
field.ItemTemplate = // some item template
field.EditItemTemplate = new AddTemplateToGridView("yourField");
newGrid.Columns.Add(field);
或声明:


希望这能有所帮助。

这样,在编辑行时,特定单元格的组合框将取代文本框出现。这样,在编辑行时,特定单元格的组合框将取代文本框出现。我无法实现这一点。从未为我的EditItemTemplate调用InstanceIn。但是,对于ItemTemplate,它可以工作…?结果是我不得不在RowUpdate事件中重新创建grd。然后它成功了,我没法让它成功。从未为我的EditItemTemplate调用InstanceIn。但是,对于ItemTemplate,它可以工作…?结果是我不得不在RowUpdate事件中重新创建grd。然后它成功了。