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
你快完成了。
只有两个小问题:
- 在表中,您将“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() { "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";