我有一个包含以下内容的字符串:“行数,列数,Row'X'Col'X'= Serial#,...
如何创建具有定义的行数和列数的DataGrid表,然后将序列号放入网格中。
例子:
2,1,R1C1 = 111,R2C1 = 112,
2,2,R1C1 = 211,R1C2 = 212,R2C1 = 213,R2C2 = 214,
谢谢
最佳答案
下面的代码可以满足您的要求;但是我必须指出这种方法的一些问题。首先,从前两个元素获取总行数和列数以创建表是有风险的。如果该数据是错误的,则此代码很可能崩溃或可能会忽略数据。例如,如果输入为:2,2,RXCX = ..,RXCX = ..,RXCX = ..,RXCX = ..,RXCX =,RXCX = ...这行将仅获取前4个值。
更糟糕的是,如果输入为2,2,RXCX = ..,RXCX =。,这将崩溃...然后,由于没有第4个元素,当您尝试访问splitArray中的第4个元素时,它将崩溃。两种方法都不行。
我的观点是要安全……这是在创建网格之前查看实际有多少数据的更好方法。使用StringArray.Length减去前两个元素,可以得到多少个项目。这些元素将定义尺寸,并允许您检查其有效性。这将确保您的循环不会超出范围,因为提供的数据有误。当您可以从数据本身获取信息时,提供维值似乎是多余的并且容易出错。
我仍然不是100%知道您想在这里完成什么。它看起来像是某种形式的搜索。这就是我所描绘的……
看着您(上一个)的屏幕快照,在您输入“序列号”文本框并单击“搜索Txt文件”按钮后,它会搜索来自输入字符串即“ PLX51…”的数据,然后显示网格显示与“序列号”文本框中的内容相匹配(或类似)的“已过滤”结果。如果是这样,我将忽略RXCX值,并将数据放在单个列中。然后,在用户键入“序列号”文本框中时,为文本框连接一个OnKeyPress事件以过滤网格。
否则,我迷失了为什么您将需要以上述方式创建数据。仅仅是因为输入中包含不必要的数据……并不意味着您必须使用它。只是一个想法。
string inputString = "2,2,R1C1=211,R1C2=212,R2C1=213,R2C2=214";
string[] splitArray = inputString.Split(',');
int totalRows = int.Parse(splitArray[0]);
int totalCols = int.Parse(splitArray[1]);
int itemIndex = 2;
// add the columns
for (int i = 0; i < totalCols; i++)
{
dataGridView1.Columns.Add("Col", "Col");
}
// add the rows
dataGridView1.Rows.Add(totalRows);
for (int i = 0; i < totalRows; i++)
{
for (int j = 0; j < totalCols; j++)
{
dataGridView1.Rows[i].Cells[j].Value = splitArray[itemIndex];
itemIndex++;
}
}
关于c# - 在Visual Studio C#中使用DataGridView,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39841698/