如何显示 属性 而不是数据绑定 DataGridViewComboBox 中的值?
How to display a property instead of the value in a databound DataGridViewComboBox?
我是 C# 和 .NET 的新手
我需要在数据绑定的 DatagridViewComboBox 中显示值的匹配名称,但我不知道该怎么做。
我有以下代码:
bs = new BindingSource();
bs.DataSource = typeof(CR);
dataGridView1.AutoGenerateColumns = false;
Column1.Width = 400;
Column1.DataPropertyName = "CR_NAME";
Column2.DataPropertyName = "CR_STATE_S";
Column2.ValueMember = "CR_STATE_S";
Column2.DisplayMember = "GetStateName";
Column2.Items.Add("0"); // how to set the matching value here?
Column2.Items.Add("1");
Column2.Items.Add("2");
dataGridView1.DataSource = bs;
GetStateName是一个属性的CRClass即returnsCR状态的匹配名称。我需要在组合框中显示州名。怎么做?谢谢
如果要显示与单元格应包含的值不同的内容,则不能简单地将一个内容加载到 ComboBoxCells 的项目中。
相反,您需要一个 DataSource,该 DataSource 至少具有用于您要使用的两个内容的不同字段:
- 用于数据可见表示的字段,称为
DisplayMember
- 还有一个用于实际数据值的字段,称为
ValueMember
这些字段可以放在 DataTable
中,但您也可以使用任何其他具有 suitable 属性的集合。
让我们创建一个非常简单的 class 并有一个列表 class:
class itemClass
{
public string display { get; set;}
public string value { get; set; }
public itemClass(string d, string v)
{ display = d; value = v;}
}
List<itemClass> myItems = new List<itemClass>();
private void loadButton_Click(object sender, EventArgs e)
{
// load the list with all values:
myItems.Add(new itemClass("zero", "0"));
myItems.Add(new itemClass("one", "1"));
myItems.Add(new itemClass("two", "2"));
myItems.Add(new itemClass("three", "3"));
myItems.Add(new itemClass("four", "4"));
myItems.Add(new itemClass("five", "5"));
myItems.Add(new itemClass("six", "6"));
// prepare the DataGridView 'DGV':
DGV.Columns.Clear();
DataGridViewComboBoxCell cCell = new DataGridViewComboBoxCell();
DataGridViewComboBoxColumn cCol = new DataGridViewComboBoxColumn();
DGV.Columns.Add(cCol);
cCol.DisplayMember = "display";
cCol.ValueMember = "value";
cCol.DataSource = myItems;
cCol.ValueType = typeof(string);
// add a few rows, for testing:
DGV.Rows.Add(7);
for (int i = 0; i < DGV.Rows.Count;
i++) DGV.Rows[i].Cells[0].Value = i + "";
}
在示例中,我手动加载了 Items
。通常您会希望从数据库或其他来源中提取值。您可以通过如上所述加载数据源列表来实现,或者您可以独立地或在 DataSet
中进行查找 table。
如果所有单元格都需要有单独的查找值,您需要单独加载它们,而不是使用列,而是将每个单元格转换为 DataGridViewComboBoxCell
。
我是 C# 和 .NET 的新手
我需要在数据绑定的 DatagridViewComboBox 中显示值的匹配名称,但我不知道该怎么做。
我有以下代码:
bs = new BindingSource();
bs.DataSource = typeof(CR);
dataGridView1.AutoGenerateColumns = false;
Column1.Width = 400;
Column1.DataPropertyName = "CR_NAME";
Column2.DataPropertyName = "CR_STATE_S";
Column2.ValueMember = "CR_STATE_S";
Column2.DisplayMember = "GetStateName";
Column2.Items.Add("0"); // how to set the matching value here?
Column2.Items.Add("1");
Column2.Items.Add("2");
dataGridView1.DataSource = bs;
GetStateName是一个属性的CRClass即returnsCR状态的匹配名称。我需要在组合框中显示州名。怎么做?谢谢
如果要显示与单元格应包含的值不同的内容,则不能简单地将一个内容加载到 ComboBoxCells 的项目中。
相反,您需要一个 DataSource,该 DataSource 至少具有用于您要使用的两个内容的不同字段:
- 用于数据可见表示的字段,称为
DisplayMember
- 还有一个用于实际数据值的字段,称为
ValueMember
这些字段可以放在 DataTable
中,但您也可以使用任何其他具有 suitable 属性的集合。
让我们创建一个非常简单的 class 并有一个列表 class:
class itemClass
{
public string display { get; set;}
public string value { get; set; }
public itemClass(string d, string v)
{ display = d; value = v;}
}
List<itemClass> myItems = new List<itemClass>();
private void loadButton_Click(object sender, EventArgs e)
{
// load the list with all values:
myItems.Add(new itemClass("zero", "0"));
myItems.Add(new itemClass("one", "1"));
myItems.Add(new itemClass("two", "2"));
myItems.Add(new itemClass("three", "3"));
myItems.Add(new itemClass("four", "4"));
myItems.Add(new itemClass("five", "5"));
myItems.Add(new itemClass("six", "6"));
// prepare the DataGridView 'DGV':
DGV.Columns.Clear();
DataGridViewComboBoxCell cCell = new DataGridViewComboBoxCell();
DataGridViewComboBoxColumn cCol = new DataGridViewComboBoxColumn();
DGV.Columns.Add(cCol);
cCol.DisplayMember = "display";
cCol.ValueMember = "value";
cCol.DataSource = myItems;
cCol.ValueType = typeof(string);
// add a few rows, for testing:
DGV.Rows.Add(7);
for (int i = 0; i < DGV.Rows.Count;
i++) DGV.Rows[i].Cells[0].Value = i + "";
}
在示例中,我手动加载了 Items
。通常您会希望从数据库或其他来源中提取值。您可以通过如上所述加载数据源列表来实现,或者您可以独立地或在 DataSet
中进行查找 table。
如果所有单元格都需要有单独的查找值,您需要单独加载它们,而不是使用列,而是将每个单元格转换为 DataGridViewComboBoxCell
。