通过for循环从List更新Datarow。索引超出范围

时间:2019-02-04 15:06:13

标签: c# for-loop indexoutofboundsexception

我有两个字符串列表:

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);

我在做什么错?

1 个答案:

答案 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);

这会删除我要查找的字符串中的所有空格。