Форум программистов, компьютерный форум, киберфорум
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.61/67: Рейтинг темы: голосов - 67, средняя оценка - 4.61
0 / 0 / 0
Регистрация: 21.08.2009
Сообщений: 10
1

Как получить ссылку на ячейку DataTable?

26.08.2009, 15:43. Показов 13661. Ответов 9
Метки нет (Все метки)

КАК получить ссылку на ячейку DataTable???
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.08.2009, 15:43
Ответы с готовыми решениями:

Как в одну ячейку DataTable записать дату?
Есть DataTable я там делаю структуру DataTable myDataTable =...

Как сделать ссылку на случайную ячейку
Добрый день! Подскажите, как можно сделать такую задачу на листе 1 есть ячейки с A1 по А1000,...

Как создать динамическую ссылку на ячейку?
Всем привет! На листе 1 есть даты и соответствующие этим датам числа, на другом листе выводятся...

Как создать простейшую ссылку/указатель на ячейку памяти/переменную
Здраствуйте. Подскажите пожалуйста, как сделать простейшую ссылку/указатель на яч памяти. ...

9
80 / 79 / 4
Регистрация: 06.04.2009
Сообщений: 326
26.08.2009, 16:04 2
Вы это имели ввиду?
C#
1
2
DataTable dt = new DataTable();
string s = dt.Rows[индекс_строки][индекс_столбца].ToString();
Или как записать?
0
0 / 0 / 0
Регистрация: 21.08.2009
Сообщений: 10
26.08.2009, 16:28  [ТС] 3
нет я имел ввиду ссылку, чтото вроде
C#
1
2
DataRow dt = null;
dt = DataTable.Rows[индекс_строки];   только для ячейки
0
80 / 79 / 4
Регистрация: 06.04.2009
Сообщений: 326
26.08.2009, 17:13 4
Честно - не понятно
C#
1
dt.Rows[индекс_строки][индекс_столбца]
Это и есть ссылка на ячейку! Может я что-то не догоняю...Постою послушаю, что другие скажут
0
0 / 0 / 0
Регистрация: 21.08.2009
Сообщений: 10
27.08.2009, 09:27  [ТС] 5
приведу пример,
C#
1
2
3
4
5
6
object temp = null;
temp = dt.Rows[индекс_строки][индекс_столбца];   
// в temp запишется значение ячейки, а не ссылка на нее
//в программе я хочу записать новое значение в эту ячейку, если сделать
temp = 0;
//поменяется значение temp,но не ячейки
0
80 / 79 / 4
Регистрация: 06.04.2009
Сообщений: 326
27.08.2009, 10:03 6
Теперь понятно досконально Но не могу ничего посоветовать кроме как такой длинной записи:
C#
1
dt.Rows[индекс_строки][индекс_столбца] = 0;
1
Эксперт JavaЭксперт С++
8367 / 3589 / 419
Регистрация: 03.07.2009
Сообщений: 10,708
27.08.2009, 10:52 7
kokain, вряд ли что-то подобное реализовано. Потому как смысла в этом нет. Просто для больших таблиц глупо создавать по переменной на каждую ячейку. Использование матриц тоже не оправдано, поскольку дата грид - это и есть по сути матрица.
Работа с гридом, как показал homich77, будет в любом случае быстрее работать, чем если ты напишеш свой способ связи ячейки с переменной
0
Администратор
80699 / 49267 / 244
Регистрация: 10.04.2006
Сообщений: 13,211
27.08.2009, 11:09 8
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Давайте разберемся, что происходит в данном случае. Сначала вот этим кодом
Цитата Сообщение от kokain Посмотреть сообщение
C#
1
temp = dt.Rows[индекс_строки][индекс_столбца];
вы копируете указатель на значение ячейки в temp, т.к. object - ссылочный тип. Но что происходит потом?
Цитата Сообщение от kokain Посмотреть сообщение
C#
1
temp = 0;
0 - имет тип значения, а не ссылочный. Поэтому здесь происходит боксинг (заворачивание в ссылочный тип и размещение в куче) значения 0 и присвоение ссылки на этот объект в temp. И вы получаете абсолютно закономерный результат.
0
tokwell
07.05.2013, 20:27 9
Дружищще ты просто выручил . Огромадное спс долго искал как.

Добавлено через 1 минуту
Дружищще ты просто выручил . Огромадное спс долго искал как.


C#
1
dt.Rows[индекс_строки][индекс_столбца] = 0;
1055 / 862 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
08.05.2013, 12:15 10
mik-a-el, не совсем так в общем случае. В c# есть типы-ссылки и есть типы-значения. если мы имеет дело с типом-значением, то тогда присваивание выполняет копирование значения, а если ссылочный тип - то получаем ссылку.
Ячейка DataTable - это object, а object, хоть и является ссылочным типом, однако если хранит тип-значение, то и ведет себя как тип-значение.
Еще одно исключение - это тип String. Хоть по сути он является ссылочным типом, однако при присваивании ведет себя как тип-значение, так как это тип "только для чтения".

Разберемся на конкретном примере:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Test
{
    public int value = 10;
    public override string ToString()
    {
          return value.ToString();
    }
}
 
static void Main(string[] args)
{
       DataTable table = new DataTable();
       table.Columns.Add(new DataColumn("NoRef", typeof(int)));//столбец с типом-значением
       table.Columns.Add(new DataColumn("Ref", typeof(Test)));//столбец с типом-ссылкой
       DataRow nr = table.NewRow();
       nr[0]=10;
       nr[1]=new Test();
       table.Rows.Add(nr);
       object temp1 = table.Rows[0][0];
       temp1 = 5; //не изменит, так как было произведено копирование значения для типа-значения
       object temp2 = table.Rows[0][1];
       (temp2 as Test).value = 5; //Значение изменится, так как мы получили ссылку для ссылочного типа, а не значение
}
Добавлено через 5 минут
для того, чтоб избежать получения ссылки вместо значения для ссылочного типа следует перегрузить и использовать метод Clone() интерфейса ICloneable
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.05.2013, 12:15

Как получить индекс DataTable?
Здравствуйте! Есть некий DataTable table1, имеющий набор столбцов (в данном контексте неважно...

Как создать ссылку на long и наполнить значениями типа long-ссылка DataTable
Столкнулся с проблемой, в решении которой прошу вас помочь. DataTable была нужна мне чтобы вывести...

Data::DataTable узнать/отредактировать ячейку
Visual C++ 2008. Создаю Data::DataTable: Data::DataTable ^table1 = gcnew DataTable();...

Как получить DataTable из двух связанных таблиц?
У меня есть DataSet, включающий две связанные таблицы. Мне нужно получить на выходе DataTable -...

Как получить индекс строки таблицы DataTable
Как получить индекс поля в строке таблицы DataTable ? Получаю значение поля так DataRow row =...

Как получить данные из DataTable использую linq
Пробую следующим образом: var subdivisionName = from row in SubdivisionsData.AsEnumerable() ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.