DataGridView 设置列单元格 Combobox
Posted
技术标签:
【中文标题】DataGridView 设置列单元格 Combobox【英文标题】:DataGridView set column cell Combobox 【发布时间】:2012-10-05 13:26:02 【问题描述】:我在 Datagridview 中有这样的表格:
Name Money
-------------
Hi 100 //here Combobox with member 10,30,80,100 to choose
Ki 30 //here Combobox with member 10,30,80,100 to choose
我想从组合框中更改“金钱”列的值
我试过了,但不知道更多:
DataTable dt = new DataTable();
dt.Columns.Add("Name", typeof(String));
dt.Columns.Add("Money", typeof(String));
dt.Rows.Add(new object[] "Hi", 100);
dt.Rows.Add(new object[] "Ki", 30);
DataGridViewComboBoxColumn column = new DataGridViewComboBoxColumn();
var list11 = new List<string>() "10", "30", "80", "100" ;
column.DataSource = list11;
column.ValueMember = "Money";
dataGridView1.Columns.Add(column);
【问题讨论】:
【参考方案1】:试试这个
dataGridView1.AutoGenerateColumns = false;
DataTable dt = new DataTable();
dt.Columns.Add("Name", typeof(String));
dt.Columns.Add("Money", typeof(String));
dt.Rows.Add(new object[] "Hi", 100 );
dt.Rows.Add(new object[] "Ki", 30 );
DataGridViewComboBoxColumn money = new DataGridViewComboBoxColumn();
var list11 = new List<string>() "10", "30", "80", "100" ;
money.DataSource = list11;
money.HeaderText = "Money";
money.DataPropertyName = "Money";
DataGridViewTextBoxColumn name = new DataGridViewTextBoxColumn();
name.HeaderText = "Name";
name.DataPropertyName = "Name";
dataGridView1.DataSource = dt;
dataGridView1.Columns.AddRange(name, money);
只需使用DataPropertyName
而不是ValueMember
【讨论】:
【参考方案2】:你差不多完成了。
只有两个小问题:
-
在您的表中,您将“Money”值作为整数添加到行中,而在您的列中,它们被定义为字符串
首先添加你的表格广告DataGridView DataSource,然后设置列DataPropertyName
完整代码如下:
var table = new DataTable();
table.Columns.Add("Name", typeof(string));
table.Columns.Add("Money", typeof(string));
table.Rows.Add("Hi", "100");
table.Rows.Add("Ki", "30");
var column = new DataGridViewComboBoxColumn();
column.DataSource = new List<string>() "10", "30", "80", "100" ;
dataGridView1.Columns.Add(column);
dataGridView1.DataSource = table;
【讨论】:
【参考方案3】:您可以尝试以下方法:
DataGridViewComboBoxColumn column = new DataGridViewComboBoxColumn();
column.Name = "Money";
column.DataSource = new string[] "10", "30", "80", "100" ;
dataGridView1.Columns.Add(column);
for (int row = 0; row < dataGridView1.Columns.Count; row++)
DataGridViewComboBoxCell cell =
(DataGridViewComboBoxCell)(dataGridView1.Rows[row].Cells["Money"]);
cell.DataSource = new string[] "80", "100" ;
或者这个:
foreach (DataGridViewRow row in dataGridView1.Rows)
DataGridViewComboBoxCell cell = (DataGridViewComboBoxCell)(row.Cells["Money"]);
cell.DataSource = new string[] "10", "30" ;
【讨论】:
【参考方案4】:你可以换成
dt.Columns.Add("Money", typeof(List<string>));
【讨论】:
【参考方案5】:在设计器中设置网格时,请注意 ComboBox 列的索引。在此示例中,它是 1。Money 列是索引 1。网格已经有一个成员,它是 DataGridViewComboBoxColumn。当您初始化包含控件的表单时,获取并初始化它。像这样:
DataGridViewComboBoxColumn cbc = (DataGridViewComboBoxColumn)dataGridView1.Columns[1];
cbc.Items.Add("10");
cbc.Items.Add("30");
cbc.Items.Add("80");
cbc.Items.Add("100");
当您填充网格时,将文本值插入该单元格。当用户单击单元格时,下拉列表将出现,他们将能够更改值。
真的,如果您只想拥有一个包含这些值的下拉列表,您可以直接在设计器中通过修改 Items 集合来完成。
【讨论】:
【参考方案6】:我知道已经晚了,但试试这个:
DataTable dt = new DataTable();
dt.Columns.Add("Name", typeof(String));
dt.Columns.Add("Money", typeof(String));
dt.Rows.Add(new object[] "Hi", 100 );
dt.Rows.Add(new object[] "Ki", 30 );
DataTable dt2 = new DataTable();
dt2.Columns.Add("Money", typeof(String));
dt2.Columns.Add("Meaning", typeof(String));
dt2.Rows.Add(new object[] "30" ,"Name 1" );
dt2.Rows.Add(new object[] "100", "Name 2" );
dt2.Rows.Add(new object[] "80", "Name 3" );
dt2.Rows.Add(new object[] "90", "Name4" );
DataGridViewComboBoxColumn money = new DataGridViewComboBoxColumn();
money.DataSource = dt2;
money.HeaderText = "Money";
money.DataPropertyName = "Money";
money.DisplayMember = "Meaning";
money.ValueMember = "Money";
DataGridViewTextBoxColumn name = new DataGridViewTextBoxColumn();
name.HeaderText = "Name";
name.DataPropertyName = "Name";
DGV.Columns.Add(money);
DGV.Columns.Add(name);
DGV.DataSource = dt;
【讨论】:
【参考方案7】:((DataGridViewComboBoxColumn)dgvFacturas.Columns["estatus"]).DataSource = estatustemp.ToList();
((DataGridViewComboBoxColumn)dgvFacturas.Columns["estatus"]).ValueMember = "Key";
((DataGridViewComboBoxColumn)dgvFacturas.Columns["estatus"]).DisplayMember = "Value";
【讨论】:
【参考方案8】:您可以像这样在 Visual Studio 设计器中非常轻松地做到这一点:
-
选择(左键单击)数据网格视图 (DGV)
在 DGV 的属性中,单击链接“编辑列”。将打开一个对话框。
在“选定列”列表中选择要更改为组合框的列
在对话框的右侧,在“未绑定的列属性”“设计”部分中,找到
ColumnType
属性
将ColumnType
属性值更改为DataGridViewComboBoxColumn
在“数据”部分下,单击“项目”右侧的 3 个点,然后输入要在字符串集合编辑器中添加的值
点击确定保存更改。
运行应用程序。现在,您在第 6 步中输入的值将显示在下拉框中。
【讨论】:
以上是关于DataGridView 设置列单元格 Combobox的主要内容,如果未能解决你的问题,请参考以下文章
datagridview 单元格有一个下拉框,如何获取下拉框的值