Обновление Datarow из списка через цикл for.Индекс вышел за пределы - PullRequest
0 голосов
/ 04 февраля 2019

У меня есть два списка строк:

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

Затем я выбираю строку в dataTable, которую необходимо обновить, из 3-го элемента в currentRow,который является уникальным идентификатором.

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 голосов
/ 04 февраля 2019

Я обнаружил проблему:

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

Это удалит все пробелы в строке, которую я ищу.

...