Как добавить ComboBox в несвязанный GridView asp.net - PullRequest
2 голосов
/ 10 сентября 2010

Интересно, как добавить столбец ComboBox в несвязанный GridView через код во время выполнения .

1 Ответ

0 голосов
/ 10 сентября 2010

Программный:

В прошлом я использовал следующий класс (кроме привязки DropDown и CheckBox), который реализует 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
        }
    }
}

Используйте, объявив ваши 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);

или Декларативно:

<asp:GridView ID="GridView1" runat="server">  
<Columns>              
    <asp:TemplateField HeaderText="yourField">
        <ItemTemplate>
            <asp:Label runat="server" Text ='<%# Eval("yourField") %>' />
        </ItemTemplate>
        <EditItemTemplate>         
            <%--Your ComboBox--%>
        </EditItemTemplate>  
    </asp:TemplateField>
</Columns>
</asp:GridView>

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...