将DataGridView绑定到DataTable,但也包括ComboBox作为最后一列

时间:2009-10-13 15:26:53

标签: c# .net winforms datagridview

现在我有一个DataGridView绑定到DataTable,它运行良好。我需要在DataGridView上做的是在最后包含一个新列,它是一个ComboBox,它将动态地根据行的键值进行操作。

我的列是ID,名称和计数。第4列将是一个ComboBox,它接受一个I​​D并根据该下拉列表创建值。我目前有一个自定义的ComboBox,它在其构造函数中获取一个ID并以这种方式填充它,但我无法找到将其放入DataGridView的方法。所以,我创建了一个自定义ComboBox控件的副本并将其转换为DataGridViewComboBoxCell,但我仍然无法弄清楚如何将其动态绑定到表单。我已经浏览了互联网,发现了一些例子,但不完全是我想做的事情。

This link显示了我想要做的事情,除了我使用的是C#而不是VB。有什么想法吗?

3 个答案:

答案 0 :(得分:3)

以下是我刚刚尝试的内容:

DataTable dt = new DataTable();
            dt.Columns.Add("Col");
            dt.Rows.Add();
            dt.Rows.Add();
            dt.Rows.Add();
            dt.Rows[0][0] = "1";
            dt.Rows[1][0] = "2";
            dt.Rows[2][0] = "3";
            dataGridView1.DataSource = dt;

            dataGridView1.Columns.Add(new DataGridViewComboBoxColumn());

            List<string> lstStr = new List<string>();
            lstStr.Add("1");
            lstStr.Add("2");
            lstStr.Add("3");
            lstStr.Add("4");

            ((DataGridViewComboBoxCell)(dataGridView1.Rows[0].Cells[1])).DataSource = lstStr;

这是你在找什么?

答案 1 :(得分:2)

试试这个:

// Create a new Combo Box Column

DataGridViewComboBoxColumn EmpIdColumn = new DataGridViewComboBoxColumn();

// Set the DataSource of EmpIdColumn as bellow

EmpIdColumn.DataSource = myDataSet.Tables[0];

// Set the ValueMember property as done bellow 

EmpIdColumn.ValueMember = myDataSet.Tables[0].Columns[0].ColumnName.ToString();

// Set the DisplayMember property as follow

EmpIdColumn.DisplayMember = EmpIdColumn.ValueMember;

答案 2 :(得分:0)

你可以采取或离开这种方式,但我处理它的方式(在VB中)是将DGV绑定到一个对象集合,其中包含一些超出我实际绑定数据的额外成员。我使用这些额外的成员作为额外的东西占位符。

我将数据源(在我的情况下是一个DB)中的元素填充到集合中,根据需要填充其他成员,然后将集合绑定到DGV。由于额外成员不是原始表的成员,我可以更改其内容。然后我不必像你想要的那样处理控件的“部分绑定”。

无论如何,另一种给猫皮肤的方法。