数据绑定——c#中类似自定义集合的数据表

本文关键字:集合 数据表 自定义 数据绑定 | 更新日期: 2023-09-27 17:53:52

理论上我该怎么做呢

short - winded:使用自定义集合像数据表一样存储数据,具有可变数量的字段和列…只要行是一致的

长喘不过气:

2或3类:字段,行,可选:表

通常我会做List<Person> myList = new List<Person>;然后,该列表可以绑定到datagridview,列将基于Person类的属性。

查看代码:

List<row> table = new List<row>;
List<field> row0 = new List<field>;
row0.Add(new field(col1,"value1"));
row0.Add(new field(col2,"value2"));
row0.add(new field(col3,"value3"));
table.Add(row0);

dataGridView1.DataSource = table;
理论输出:

|    |col 1 | col 2| col 3|
___________________________
|row0|value1|value2|value3|

public class cField
{
    public string Name { get; set; }
    public string Content { get; set; }
    public cField()
    {
    }
    public cField(string name, string content)
    {
        Name = name;
        Content = content;
    }
}
public class cRow:BindingList<cField>
{
    public cRow()
    {
    }
}
public class tables:BindingList<cRow>
{
    public tables()
    {
        fillTestData();
    }
    private void fillTestData()
    {
        for (Int32 i = 0; i < 10; i++)
        {
            cRow tRow = new cRow();
                for (Int32 x=0; x < 3; x++)
                {
                    cField f1 = new cField("ColumnName" + x.ToString(), "content" + x.ToString());
                    tRow.Add(f1);
                }
                base.Items.Add(tRow);
        }                        
    }
}
//example class which shows the output of what I'd like.
public class eField
{
    public string ColumnName0 { get; set; }
    public string ColumnName1 { get; set; }
    public string ColumnName2 { get; set; }
    public eField(string colName0, string colName1, string colName2)
    {
        ColumnName0 = colName0;
        ColumnName1 = colName1;
        ColumnName2 = colName2;
    }
}
public class eTable : BindingList<eField>
{
    public eTable()
    {
        base.Add (new eField ("content","content", "content"));
        base.Add(new eField("content", "content", "content"));
        base.Add(new eField("content", "content", "content"));
    }
}

现在这里是代码的形式。

public partial class Form1 : Form
{
    tables t;
    public Form1()
    {
        InitializeComponent();

    }
    private void Form1_Load(object sender, EventArgs e)
    {
        t = new tables ();
        dataGridView1.DataSource = t;
        dataGridView2.DataSource = t[0];
        eTable table3 = new eTable ();
        dataGridView3.DataSource = table3;
    }
}

如果你把这段代码变成一个项目…您将看到第一个绑定....从绑定列表中提取一些内置的东西到grid1中。当我想让它们水平时,Grid2会垂直列出我的字段。

网格3显示了我想要的输出是.....但是我不能用我要模仿dataTable....的集合结构来实现它(代码提供)

免责声明:我缺乏关键字,我需要研究这个问题。我没找到什么。我发现最接近的东西是与连杆和枢轴有关的。但他们的产出似乎都不像我描述的那样。

我在所有地方都使用自定义集合,所以我希望保持我的代码非常相似,而不是使用数据表。这是我第一次需要我的集合以这种方式运行。

数据绑定——c#中类似自定义集合的数据表

这听起来像你正在寻找一个对象的集合,一旦你从数据库加载的数据在内存中使用。你可以在内置系统上做计算之类的事情。数据对象,但它很麻烦,并且在处理大量数据时性能不佳。

我们使用System。数据对象大量用于表示数据。我们稍后尝试在数据库中进行计算,并将结果作为DataSet呈现,因此客户端不必进行任何数据操作。

我们的一些模块需要更复杂的数据处理。在一种情况下,我们使用了一个对象数组来表示要动态处理的大量数据。列是固定的,因此它们很容易作为每个对象的属性实现。当应用程序呈现这些数据时,它会生成一个小的汇总数据集,以网格形式显示。

我们有另一个模块,其中有字段可以有值,或者它们也可以基于其他字段进行计算。对于这个模型,我们选择使用依赖于其他对象的对象来进行某种计算。改变一个值,ValueChanged事件通知任何需要计算的依赖字段,这会改变那些值,等等(这是一个粗略的简化)

如果我必须呈现可变数量的列,我会认真考虑使用System.Data.DataSet。如果这确实不适合您,您可以考虑使用一个散列表,它将列名映射到该列的行值集合。我相信System.Data.DataTable就是这样实现的;它按列存储值,而不是按行。然后,行对象将知道它的行索引以及如何从列集合中获取值。