Преобразувайте полето за мрежов изглед в падащ списък

трябва да преобразувам поле в gridview в падащ списък, но трябва да направя това в codebehind и не мога да добавя шаблонно поле в 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)


Изглежда всичко, което трябва да направите, е динамично да създадете поле за шаблон и да го добавите към изгледа на мрежата.

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

След това, в събитието, създадено в реда на изгледа на мрежата, създайте и свържете падащото меню.

    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