以编程方式绑定DataGrid
本文关键字:DataGrid 绑定 方式 编程 | 更新日期: 2023-09-27 18:29:51
有没有一种方法可以通过编程创建到DataGrid的数据绑定,这样在这样的绑定方法中,我可以接收每行中的项,并任意访问项中的数据。
例如
class Addition
{
public int P1 {get;set;}
public int P2 {get;set;}
}
在我的DataGrid中,我希望有一个其他列,输出它们的总和,在这个例子中。
在我的实际问题中,这变得更加严重,数据是动态的,我甚至无法预见列的编号和标题(实际数据将一行表示为Dictionary)。
数据可以被认为是只读的。
更新
也许一个关于我想要实现的更好的例子会对你我有更好的帮助。
我这儿有一排字典。
Dictionary<string, int>[] data;
给定同一数组中的两个字典,它们必须具有相同的关键字集。
比方说,在这样的数组中,密钥集是{"P1", "P2"}
。
但另一个阵列来了,
Dictionary<string, int>[] data2;
在该数组中,密钥集为{"P1", "P2", "P3"}
。
所以我在这里要做的是,有一个DataGrid,调整所有的键集,并有另一列,值是将它们相加。
这个问题的例子显示了与我的真实问题相同的本质。
实际上,我不确定数据网格视图是否适合您的情况,但它非常可定制,您可以完全动态地控制它。
你可以修改这个类,并添加一个数据成员来添加P1和P2,然后使你的数据源dataGridView是这个类的列表
class Addition
{
public int P1 {get;set;}
public int P2 {get;set;}
public long varSum {get;set;}
public void Addition (int P1, int P2)
{
this.P1 = P1;
this.P2 = P2;
this.varSum = P1 + P2;
}
}
然后
Addition add1 = new Addition (1,2);
List <Addition> addList = new List <Addition> ();
addList.insert(add1);
// you need to define dgv as a DataGridVirw
dgv.dataSource = addList;
然后,您的数据网格视图将有三列,P1、P2和它们的总和(varSum)。
数据网格数据视图源可以是字符串数组的列表,其中每个DGV行都是字符串数组(例如{"1"、"2"、"3"})。然后,您可以将字典转换为每个DGV行的字符串数组,然后构建这些数组的列表,并将每一行单独添加到DGV中。
int n = 10;/* retrieve this value from your dictionary as your columns count*/;
string [] xx = new string[n];
dataGridView1.ColumnCount = n;
for (int j = 0; j < n; j++)
{
xx[j]=("0"); // fill from your dictionary
dataGridView1.Columns[j].HeaderText = "someColHeaderText";
}
int m = 10;/* retrieve this value from your dictionary as your rows count*/;
for (int i = 0; i < m; i++)
{
dataGridView1.Rows.Add(xx);
dataGridView1.Rows[i].HeaderCell.Value = "someRowHeaderText";
}