2012-10-05 50 views
12

我一样,在DataGridView的表:的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); 

回答

23

试试这个

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

1

你可以尝试以下方法:

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" }; 
} 
+0

为什么它显示我只是第一列? –

0

您可以

dt.Columns.Add("Money", typeof(List<string>)); 
3

代替你几乎完成。

只有两个小问题:

  1. 在你的表要添加到行“钱”的价值为整数,而在你的专栏它们被定义为字符串
  2. 首先添加表广告的DataGridView数据源,然后设置列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; 
0

我知道它的晚,但试试这个:

  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; 
0
((DataGridViewComboBoxColumn)dgvFacturas.Columns["estatus"]).DataSource = estatustemp.ToList(); 
((DataGridViewComboBoxColumn)dgvFacturas.Columns["estatus"]).ValueMember = "Key"; 
((DataGridViewComboBoxColumn)dgvFacturas.Columns["estatus"]).DisplayMember = "Value";