C# Dynamic Table

本文关键字:Table Dynamic | 更新日期: 2023-09-27 18:17:24

我想动态创建一个表。我有有限的空间容纳这个表,所以我想把最大行数设置为10。

前两列将被填充,当它达到10时,然后创建另外两列填充另外10行,然后创建另外两列,等等。

我该怎么做,或者做循环的最好方法是什么?

C# Dynamic Table

我想你想从他的表单中翻译数据:

A 1
B 2
C 3
D 4
E 5
F 6
G 7

A 1 D 4 G 7
B 2 E 5
C 3 F 6

如果是这样的话,你可以这样做:

首先,我使用一个类来包含每对数据项(如a,1),如下所示:

    class DataElement
    {
        public string Value1 { get; set; }
        public string Value2 { get; set; }
    }

然后我构建了一个辅助函数,它接受List并将其转换为您的格式的表:

    private const int MaxRows = 3; //Configure how many Rows in the table
    private const int NumColsPerElement = 2; //Configure how many columns per element
    static System.Data.DataTable BuildTabularTableElements(List<DataElement> elements)
    {
        System.Data.DataTable dt = new System.Data.DataTable();
        int columnCount = (((elements.Count + MaxRows - 1) / MaxRows)) * NumColsPerElement;          
        for (int x = 0; x < columnCount; x++) //Add enough columns
            dt.Columns.Add();
        for (int x = 0; x < Math.Min(MaxRows, elements.Count); x++) //Add enough rows
            dt.Rows.Add();
        for (int x = 0; x < elements.Count; x++)
        {
            int curCol = (x / MaxRows) * NumColsPerElement; //Determine the current col/row
            int curRow = x % MaxRows;
            dt.Rows[curRow][curCol] = elements[x]First you need a.Value1; //Place the data in the correct row/column
            dt.Rows[curRow][curCol+1] = elements[x].Value2;
        }
        return dt;
    }

最后要测试,使用这个:

       List<DataElement> e = new List<DataElement>();
       e.Add(new DataElement() { Value1 = "1", Value2 = "2" });
       e.Add(new DataElement() { Value1 = "3", Value2 = "4" });
       e.Add(new DataElement() { Value1 = "5", Value2 = "6" });
       e.Add(new DataElement() { Value1 = "7", Value2 = "8" });
       System.Data.DataTable dt = BuildTabularTableElements(e);

注意,我使用常量来控制要使用的行数和列数。在我的示例中,每个数据元素使用最大3行和2列。这当然可以清理一下,但我认为它是你想要的。您可以将常量作为方法参数,并将List更改为使用标准数组,以便提供高灵活性,这样您就可以使用任意大小的表和列计数,但如果您需要的话,我将把它留给您。