以编程方式绑定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,调整所有的键集,并有另一列,值是将它们相加。

这个问题的例子显示了与我的真实问题相同的本质。

以编程方式绑定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";
}