Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   DataGrid и гиперссылка из Access (http://forum.oszone.net/showthread.php?t=149443)

avmir 01-09-2009 00:33 1208392

DataGrid и гиперссылка из Access
 
Помогите пожалуйста в таком вопросе:

На форме есть DataGrid который получает данные из DataSet-а. DataSet заполняется из БД Access. В БД есть столбцы с гиперссылками (тип данных - гиперссылка).
В DataSet гиперссылка попадает в таком виде

текст#URI#

и также отображается в DataGrid-е (не смотря на то, что соответствующие столбцы - DataGridViewLinkColumn).
Пробовал на прямую получать данные в Grid из Access - та же песня...
Как заставить Grid правильно отображать гиперссылку?

В DataSet-е нет типа данных "гиперссылка". Если в DataSet-е поменять значение (или добавить строку), соблюдая указанный синтаксис - все успешно сохраняется в БД и при ее открытии Access-ом выглядит как надо.
А вот в DataGrid отображается без "конвертации"...

Delirium 01-09-2009 01:47 1208425

avmir, уточните, на чем вы программируете? ASP.NET или же просто Visual C#? Просто варианты ответа отличаются :)

avmir 01-09-2009 12:32 1208703

Не ASP - System.Windows.Forms.DataGridView

avmir 01-09-2009 14:04 1208790

Никто не знает, что-ли? Весь инет уже облазил :( а внятного ответа нет...
"Нам бы схемку, аль чертеж"...

Delirium 02-09-2009 00:56 1209251

avmir, вы не забывайте, что программирует немного народу, и ответить могут далеко не все :) Я сегодня попробую воспроизвести Вашу проблему и отпишу о результатах.

Delirium 02-09-2009 02:25 1209285

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

Код:

private void Form1_Load(object sender, EventArgs e)
        {
            this.tmpTableAdapter.Fill(this.testDataSet.tmp);
           
            string hyperlink = "";
            int index = 0;
            foreach (DataGridViewRow row in dataGridView1.Rows)
            {
                hyperlink = row.Cells[2].FormattedValue.ToString(); //Берем нашу строку вида www.ya.ru#www.ya.ru@#                     
                index = hyperlink.IndexOf("#"); //Ищем знак #
                hyperlink = hyperlink.Substring(index + 1, hyperlink.Substring(index + 1).Length - 1); //Вычисляем подстроку.
                row.Cells[2].Value = hyperlink; //Заносим в ячейку.

            }

        }

В таком варианте все работает. В примере код вставлен сразу после заполнения грида. Можно преобразовать его в функцию и вызывать когда необходимо. Само собой, надо будет в строке row.Cells[2].Value вместо 2 поставить нужный столбец.

avmir 02-09-2009 04:23 1209319

Спасибо! Попробую сей вариант. Только не знаю как это отразится на производительности если ячеек, например, 40000...

Delirium 02-09-2009 05:35 1209327

avmir, а что, вы будете отображать на экране сразу все 40 000 строк? По этому поводу уже много дебатов было. Как правило, делают либо пейджинг, либо еще как.
P.S. 98 000 тестовых записей обрабатывались около 2,5 секунд в DEBUG режиме.

P.P.S. А может быть проще в БД хранить ссылки в виде текста, а уже в DataGridView делать DataGridViewLinkColumn на данное поле? Так гораздо быстрее и проще.


Время: 05:17.

Время: 05:17.
© OSzone.net 2001-