DataGridView привязан к DataTable. Получение комбобоксов для перечислений - PullRequest
2 голосов
/ 14 апреля 2009

Если у вас есть DataTable, у которого есть столбец некоторого типа Enum.

И вы привязываете DataGridView к этому DataTable (myDgv.DataSource = myDataTable) ..

Как сделать так, чтобы DataGridView показывал комбинированный список (или это выпадающий список? Единственное, что вы можете сделать, это выбрать) в каждой ячейке этого столбца? В поле со списком должно быть выбрано текущее значение и другие возможные значения перечисления.

В настоящий момент эти ячейки отображаются как простые старые редактируемые текстовые ячейки со строковым представлением значения перечисления в них.

Ответы [ 2 ]

4 голосов
/ 14 апреля 2009

Я бы посоветовал вам прочитать Принудительное выполнение DataGridView моих ставок - рассказ о взломе ComboBox :

Сначала я с оптимизмом смотрел на примеры DataGridView (обзор) (Загрузить образцы DataGridView), но я не видел ничего, что делало то, что я хотел сделать: взять значение enum и представить его в сетке с помощью комбинированного списка , Итак, вот как я это сделал.

Также вам следует проверить Как: привязать объекты к элементам управления Windows Forms DataGridView :

В следующем примере кода показано, как связать коллекцию объектов с элементом управления DataGridView, чтобы каждый объект отображался в виде отдельной строки. В этом примере также показано, как отобразить свойство с типом перечисления в DataGridViewComboBoxColumn, чтобы раскрывающийся список поля со списком содержал значения перечисления.

2 голосов
/ 14 апреля 2009

Ну, я не знаю, подходит ли то, что я собираюсь сказать, но у меня недавно было подобное требование: отобразить ссылку в DataGridView, привязанную к DataSet, это

protected void grvResultado_RowDataBound(object sender, GridViewRowEventArgs e) {
    if (grvResultado.HeaderRow == null || grvResultado.HeaderRow.Cells.Count == 0) return;
    bool hasLink = false;
    int ind = 0;
    foreach (TableCell c in grvResultado.HeaderRow.Cells) {
        if (c.Text == "link") {
            hasLink = true;
            break;
        }
        ind++;
    }
    if (!hasLink) return;


    if (e.Row.RowType == DataControlRowType.DataRow) {
        TableCell c = e.Row.Cells[ind];
        var lnk = new HyperLink();
        lnk.Text = "Ver";
        lnk.NavigateUrl = c.Text;
        c.Controls.Clear();
        c.Controls.Add(lnk);
    }
}

Вы можете освоить то, что вам нужно, как я сделал

...