通过对循环从列表更新数据行。指数是出界

问题描述 投票:0回答:1

我有两个字符串列表:

currentRow =包含的信息,该行应该有

currentCol =包含从currentRow数据应该走的列的名称。

每个列表包含25(0-24)项目,并为数据行应该写入相同的方式订购。

我在这里尽显列表,从窗体上的标签和文本框:

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

然后我选择需要从在currentRow的第三个项目,这是一个唯一的标识符更新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);

我究竟做错了什么?

c# for-loop indexoutofboundsexception
1个回答
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);

这消除了我要找的字符串中的任何空白。

© www.soinside.com 2019 - 2024. All rights reserved.