C# Dynamic Table
本文关键字:Table Dynamic | 更新日期: 2023-09-27 18:17:24
我想动态创建一个表。我有有限的空间容纳这个表,所以我想把最大行数设置为10。
前两列将被填充,当它达到10时,然后创建另外两列填充另外10行,然后创建另外两列,等等。
我该怎么做,或者做循环的最好方法是什么?
我想你想从他的表单中翻译数据:
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更改为使用标准数组,以便提供高灵活性,这样您就可以使用任意大小的表和列计数,但如果您需要的话,我将把它留给您。