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

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

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

Студворк — интернет-сервис помощи студентам
КАК получить ссылку на ячейку DataTable???
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.08.2009, 15:43
Ответы с готовыми решениями:

Как в одну ячейку DataTable записать дату?
Есть DataTable я там делаю структуру DataTable myDataTable = DataSet_PersonData.Tables.Add("PersonalData"); ...

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

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

9
 Аватар для homich77
81 / 80 / 4
Регистрация: 06.04.2009
Сообщений: 326
26.08.2009, 16:04
Вы это имели ввиду?
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  [ТС]
нет я имел ввиду ссылку, чтото вроде
C#
1
2
DataRow dt = null;
dt = DataTable.Rows[индекс_строки];   только для ячейки
0
 Аватар для homich77
81 / 80 / 4
Регистрация: 06.04.2009
Сообщений: 326
26.08.2009, 17:13
Честно - не понятно
C#
1
dt.Rows[индекс_строки][индекс_столбца]
Это и есть ссылка на ячейку! Может я что-то не догоняю...Постою послушаю, что другие скажут
0
0 / 0 / 0
Регистрация: 21.08.2009
Сообщений: 10
27.08.2009, 09:27  [ТС]
приведу пример,
C#
1
2
3
4
5
6
object temp = null;
temp = dt.Rows[индекс_строки][индекс_столбца];   
// в temp запишется значение ячейки, а не ссылка на нее
//в программе я хочу записать новое значение в эту ячейку, если сделать
temp = 0;
//поменяется значение temp,но не ячейки
0
 Аватар для homich77
81 / 80 / 4
Регистрация: 06.04.2009
Сообщений: 326
27.08.2009, 10:03
Теперь понятно досконально Но не могу ничего посоветовать кроме как такой длинной записи:
C#
1
dt.Rows[индекс_строки][индекс_столбца] = 0;
1
Эксперт JavaЭксперт С++
 Аватар для M128K145
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
27.08.2009, 10:52
kokain, вряд ли что-то подобное реализовано. Потому как смысла в этом нет. Просто для больших таблиц глупо создавать по переменной на каждую ячейку. Использование матриц тоже не оправдано, поскольку дата грид - это и есть по сути матрица.
Работа с гридом, как показал homich77, будет в любом случае быстрее работать, чем если ты напишеш свой способ связи ячейки с переменной
0
Администратор
 Аватар для mik-a-el
87856 / 53177 / 249
Регистрация: 10.04.2006
Сообщений: 13,764
27.08.2009, 11:09
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

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

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


C#
1
dt.Rows[индекс_строки][индекс_столбца] = 0;
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
08.05.2013, 12:15
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.05.2013, 12:15
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru