DataGridView设置列单元格Combobox

我在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 

我想从combobox中更改列“Money”值

我试过这个,但不知道进一步:

 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() { "10", "30", "80", "100" }; column.DataSource = list11; column.ValueMember = "Money"; dataGridView1.Columns.Add(column); 

试试这个

 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() { "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. 在表中,您将“Money”值作为整数添加到行中,而在列中,它们被定义为字符串
  2. 首先添加表格广告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() { "10", "30", "80", "100" }; dataGridView1.Columns.Add(column); dataGridView1.DataSource = table; 

您可以尝试以下方法:

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

你可以替换

 dt.Columns.Add("Money", typeof(List)); 

我知道现在已经晚了但试试这个:

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