gpt4 book ai didi

c# - 带枚举的数据绑定(bind) DatagridviewComboboxColumn

转载 作者:行者123 更新时间:2023-11-30 12:29:09 29 4
gpt4 key购买 nike

我有一个数据 GridView ,它是通过从 SQL 服务器获取数据来填充的。

gridview.Datasource = dataSet.Tables[0] 

-> 没问题。

在这个网格中,一列是 ComboboxColumn...

对于这个的填充(我的意思是,只绑定(bind)一个数据源),没问题:

cmb.DataSource = Enum.GetValues(typeof(MyEnum));
cmb.ValueType = typeof(MyEnum);
cmb.DataPropertyName = "MyEnum";

我想知道如何数据绑定(bind) datagridviewcomboboxcolumn(此列在 DB 中的值是此组合框的所选值的索引。此组合框的数据源是一个枚举)。

数据库中的值:2 -> 这是要显示的项目的索引

我可以在某处精确指定数据库列名称吗?如果我在 datapropertyname 中这样做,我会收到错误 -> DataGridViewComboboxCell 值无效 ...

提前致谢!

编辑:问题“已解决”。我用数据表替换了枚举。简单多了。

最佳答案

如上面的评论所述,我为您提供以下选项:

这是一个示例,您可以根据需要对其进行细粒度设置,因此首先在设置 gridview 数据源之前添加未绑定(bind)的组合框列为其命名,然后设置数据源,然后设置 datagridview 数据源并订阅例如CellEndEdit 和 RowStateChanged 事件是这样的:

 DataGridViewComboBoxColumn col = new DataGridViewComboBoxColumn();
col.DataSource = Enum.GetValues(typeof(MyEnum));
col.Name = "testcolumn";

int index = dataGridView1.Columns.Add(col);
//"index" is if you want to set properties and so on to this column
//but no need for this example.
//dataGridView1.Columns[index].Name = "testcolumn";

dataGridView1.DataSource = test;

//the 2 event-handlers
dataGridView1.CellEndEdit += new DataGridViewCellEventHandler(dataGridView1_CellEndEdit);
dataGridView1.RowStateChanged += new DataGridViewRowStateChangedEventHandler(dataGridView1_RowStateChanged);

然后在这 2 个处理程序中执行此操作(处理 CellEndEdit,因此每次您编辑包含数据库中的值的单元格时,comboboxcell 也会更新);

void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
//here i use TestCol as a name for the column i want to check
//you replace it with the column you have from the database
//if you didnt change it of course...
if (e.ColumnIndex == dataGridView1.Columns["TestCol"].Index)
{
//and here i assign the value on the current row in the testcolumn column
//thats the combobox column...
dataGridView1.Rows[e.RowIndex].Cells["testcolumn"].Value = (MyEnum)((int)dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value);
}
}

private void dataGridView1_RowStateChanged(object sender, DataGridViewRowStateChangedEventArgs e)
{
//here i assign the initial values to the each cell in the combobox column
//this whole example could be done in other ways but in a nutshell
//it should provide you a good kickstart to play around.
if (e.Row.DataBoundItem != null)
{
e.Row.Cells["testcolumn"].Value = (MyEnum)((int)e.Row.Cells["TestCol"].Value);
}
}

我在这里假设数据库中的列只有数值,例如 0 或 2 或 5,并且您的枚举必须具有相同数量的值,例如,如果在数据库列中您的值达到最大值 5那么你的枚举将是这样的,例如:

public enum MyEnum
{
zero,
one,
two,
three,
four,
five
}

关于c# - 带枚举的数据绑定(bind) DatagridviewComboboxColumn,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19406042/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com