DataGridView绑定到DataTable。为枚举获取组合框

时间:2009-04-14 15:55:49

标签: .net winforms ado.net datagridview datatable

如果你的DataTable有一个枚举类型的列。

您将DataGridView绑定到此DataTablemyDgv.DataSource = myDataTable)..

如何让DataGridView在这个列的每个单元格中显示一个组合框(或者它是下拉列表?你唯一能做的就是选择)?组合框应该选择当前值,并且可以选择其他可能的枚举值。

目前,这些单元格显示为纯旧的可编辑文本单元格,其中包含枚举值的字符串表示。

2 个答案:

答案 0 :(得分:4)

我建议您阅读Forcing the DataGridView to do my bidding - a tale of ComboBox hackery

  

起初我对DataGridView示例(概述)持乐观态度(下载DataGridView示例),但我没有看到任何我想做的事情:获取枚举值并使用组合框在网格中表示它。所以,我就是这样做的。

另外,您应该查看How to: Bind Objects to Windows Forms DataGridView Controls

  

以下代码示例演示如何将对象集合绑定到DataGridView控件,以便每个对象显示为单独的行。此示例还说明了如何在DataGridViewComboBoxColumn中显示具有枚举类型的属性,以便组合框下拉列表包含枚举值。

答案 1 :(得分:2)

好吧,我不知道我要说的是否适合这里,但我最近有类似的要求:在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);
    }
}

你可以像我一样习惯你需要的东西