Преобразовать поле gridview в раскрывающийся список

мне нужно преобразовать поле в gridview в раскрывающийся список, но мне нужно сделать это в отделенном коде, и я не могу добавить поле шаблона в apsx (но оно может быть создано во время выполнения...) Я заполняю свою сетку этим кодом :

        foreach (var item in response.Select(x => x.idMatriz).Distinct())
        {
            dr = dt.NewRow();
            for (int i = 0; i < colunas; i++)
            {
                dr[i] = response.Where(x => x.Propriedade == dt.Columns[i].ToString() && x.idMatriz == item).Select(x => x.Valor).FirstOrDefault();
            }
            dt.Rows.Add(dr);
        }

Это работает, но мне нужно, чтобы эти поля были выпадающим... любая помощь?


person bagegilson    schedule 23.01.2014    source источник
comment
Почему нельзя изменить разметку? Это действительно был бы идеальный способ сделать это. Код, который вы показываете, похоже, не имеет ничего общего с пользовательским интерфейсом...   -  person David    schedule 23.01.2014
comment
Я не могу добавить, потому что мои столбцы генерируются на основе базы данных, поэтому, когда какие-либо данные включаются/обновляются/удаляются, столбцы будут меняться...   -  person bagegilson    schedule 23.01.2014


Ответы (1)


Похоже, все, что вам нужно сделать, это динамически создать поле шаблона и добавить его в gridview.

var field = new TemplateField {HeaderText = col.ColumnName}
gridView.Columns.Add(field);

После этого в созданном событии строки gridview создайте и подключите раскрывающийся список.

    public void DynamicGridView_RowCreated(object sender, GridViewRowEventArgs e)
    {

        if (e.Row.RowType != DataControlRowType.DataRow)
        {
            return;
        }

        var grid = sender as GridView;
        if (grid == null)
        {
            return;
        }

        for (var i = 0; i < grid.Columns.Count; i++)
        {
            var column = grid.Columns[i] as TemplateField;
            if (column == null)
                continue;

            var cell = e.Row.Cells[i];
            var dropdown = new DropDownList();
            cell.Controls.Add(dropdown);
        }
    }
person Jon Willis    schedule 23.01.2014