如何将DataGridView列设置为DataGridViewComboBoxColumn
本文关键字:设置 DataGridViewComboBoxColumn DataGridView | 更新日期: 2023-09-27 18:13:23
下面是我的代码:
DataSet data = new DataSet();
data.ReadXml("data.xml");
DataGridView grid = new DataGridView();
var genreCboBoxItems = data.Tables[0].AsEnumerable().Select(genre => genre.Field<string>("genre")).Distinct().ToArray();
// TODO: Make is so the 'genre' column in grid is a combo box?
grid.DataSource = data.Tables[0];
grid.Dock = DockStyle.Fill;
this.Controls.Add(grid);
*edit: genreCboBoxItems
试试这个:(测试)
var column = new DataGridViewComboBoxColumn();
column.DataSource = data.Tables[0].AsEnumerable().
Select(genre => new { genre = genre.Field<string>("genre") }).Distinct();
column.DataPropertyName = "genre";
column.DisplayMember = "genre";
column.ValueMember = "genre";
grid.DataSource = data.Tables[0];
// Instead of the below line, You could use grid.Columns["genre"].Visible = false;
grid.Columns.Remove("genre");
grid.Columns.Add(column);
这可能有助于您将DataGridViewColumn转换为DataGridViewComboBox。
首先使用具有适当名称的设计器创建DataGridViewComboBoxColumn。然后说你有一个字符串列表和其他字符串值绑定到datagridview的列表,然后使用下面的代码:下面的代码将绑定一个列表到两个DataGridViewTextBoxCell和一个DataGridViewComboBoxCell。注意,AllCriterias是一个包含两个字符串值和一个字符串列表的列表。DGVEligibilityCriteria是网格名称。
for (int i = 0; i < AllCriterias.Count; i++)
{
DataGridViewTextBoxCell Cmb1 = (DataGridViewTextBoxCell)DGVEligibilityCriteria.Rows[i].Cells[0];
Cmb1.Value = AllCriterias[i].Name;
DataGridViewTextBoxCell Cmb2 = (DataGridViewTextBoxCell)DGVEligibilityCriteria.Rows[i].Cells[1];
Cmb2.Value = AllCriterias[i].Type;
DataGridViewComboBoxCell Cmb = (DataGridViewComboBoxCell)DGVEligibilityCriteria.Rows[i].Cells[2];
foreach (var filtervalue in AllCriterias[i].FilterValues)
{
Cmb.Items.Add(filtervalue);
}
}
需要通过设置selectindex属性来默认显示第一个索引。这里的"filterValues"是你在datagridview设计器中创建的DataGridViewComboBoxCell的名称。
foreach (DataGridViewRow row in DGVEligibilityCriteria.Rows)
{
row.Cells["filterValues"].Value = (row.Cells["filterValues"] as DataGridViewComboBoxCell).Items[0];
}