我有两个字符串列表:
currentRow =包含该行应具有的信息
currentCol =包含currentRow数据应输入的列的名称。
每个列表包含25(0-24)个项目,并且其排序方式与其应写入的dataRow相同。
我在这里从表单上的标签和文本框中填写列表:
List<string> currentRow = new List<string>();
List<string> currentCol = new List<string>();
foreach (var c in form11.Controls)
{
if (c.GetType() == typeof(TextBox))
{
var str = c.ToString();
var str1 = str.Substring(35);
currentRow.Add(str1);
}
if (c.GetType() == typeof(Label))
{
var str = c.ToString();
var str1 = str.Substring(34);
currentCol.Add(str1);
}
}
然后,我从dataRow的第3项中选择需要更新的dataTable行,该行是唯一标识符。
var updateRow = arraysDt.Select("SERIAL =" + "'" + currentRow.ElementAtOrDefault(2) + "'");
现在,我尝试从此处列表中的项目更新行:
for (int i = 0; i < currentRow.Count; i++)
{
//MessageBox.Show(currentCol.ElementAtOrDefault(i).ToString() + " " + currentRow.ElementAtOrDefault(i).ToString());
updateRow[0][currentCol.ElementAtOrDefault(i)] = currentRow.ElementAtOrDefault(i);
}
一旦它进入for循环,我就会抛出“索引超出数组范围”错误。
正如我所说,currentCol包含列名,而currentRow是值。 因此,当它到达此处时,我希望它能够找到列名,然后使用该值对其进行更新。
updateRow[0][currentCol.ElementAtOrDefault(i)] = currentRow.ElementAtOrDefault(i);
我在做什么错?
答案 0 :(得分:0)
我发现了问题:
"SERIAL =" + "'" + currentRow.ElementAtOrDefault(2) + "'"
会给我这个:
SERIAL ='XXXXX'
我需要的是:
SERIAL ='XXXXX'
为了解决这个问题,我做了:
string SMnum = currentRow.ElementAt(2).ToString().Replace(" ", string.Empty);
string query = string.Format("SERIAL='{0}'", SMnum.Replace(@"'", "''"));
var updateRow = arraysDt.Select(query);
这会删除我要查找的字符串中的所有空格。