IMFAMOUS Ответов: 2

Если я создам список datarow из datatable, а затем внесу изменения в строку seaparately. Отразится ли это в таблице данных?


Я новичок в dot net framework. Так вот в чем проблема:

Я импортировал список пользователей из excel в таблицу данных с именем "dt". Теперь в другой функции, в которую я передаю свой dt DataTable, я создаю список DataRow и инициализирую его, как показано ниже:
List<DataRow> rows = dt.Select([LAN ID]='ABC123').ToList();


Это позволит выбрать все строки, имеющие 'АБВ123' в столбце идентификатор локальной сети.

Теперь я присваиваю значения различным столбцам в выбранных строках:
foreach (DataRow row in rows)
{
row[LAN ID] = "DEF456";
row[User ID] = '123456';
row[Last Name] = "Doe";
row[First Name] = "John"
}


Если я так поступлю. Будет ли DataTable dt обновляться с этими значениями?

Что я уже пробовал:

Поскольку я работаю над созданием Службы Windows, отладка будет болезненной. Поэтому и спрашиваю здесь.

Кроме того, если вы можете предоставить какой-то контекст относительно того, почему, чтобы я мог понять. Большинство статей по этой теме, которые я нашел, состояли в том, чтобы добавить новую строку в datatable.

2 Ответов

Рейтинг:
5

Karthik_Mahalingam

Цитата:
Если я так поступлю. Будет ли DataTable dt обновляться с этими значениями?
Да, только отфильтрованные строки в dt будет обновляться до нового значения.
Цитата:
Поскольку я работаю над созданием Службы Windows, отладка будет болезненной. Поэтому и спрашиваю здесь.

Вы могли бы создать простое консольное приложение и попробовать.
смотрите ниже
using System.Collections.Generic;
using System.Data;
using System.Linq;

namespace CPTemp
{
    class Program
    {
        static void Main(string[] args)
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("Col1");
            dt.Rows.Add("ABC123");
            dt.Rows.Add("ABC123");
            dt.Rows.Add("test");
            dt.Rows.Add("test123");
            MyMethod(dt);
            string row1 = dt.Rows[0][0].ToString(); //DEF456
            string row2 = dt.Rows[1][0].ToString(); //DEF456
            string row3 = dt.Rows[2][0].ToString(); //test
            string row4 = dt.Rows[3][0].ToString(); //test123

        }

        private static void MyMethod(DataTable dt)
        {
            List<DataRow> rows = dt.Select("Col1='ABC123'").ToList();  // 2 rows

            foreach (DataRow row in rows)
            {
                row["Col1"] = "DEF456";
            }

            
        }
    }
}


IMFAMOUS

Таким образом, DataRow создает только ссылку на DataTable? И да, я должен был это сделать, просто был немного ошеломлен. Спасибо за ответ.

Karthik_Mahalingam

Как я уже упоминал. Я передаю Datatable dt в эту функцию. И функция имеет эти коды. Так что технически dt имеет большую область применения, не так ли? и значения будут отражены в dt?

обновлено решение для этого комментария.

Рейтинг:
13

RDBurmon

да , это будет так, но это не должно быть в ограниченном объеме, вы должны объявить свою модель данных глобально

c# - как отредактировать строку в datatable - переполнение стека[^]

Как редактировать строки в таблице данных[^]


IMFAMOUS

Как я уже упоминал. Я передаю Datatable dt в эту функцию. И функция имеет эти коды. Так что технически dt имеет большую область применения, не так ли? и значения будут отражены в dt?