Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Отображение данных через DataGridView.


Автор: IQDDD 18.4.2012, 18:35
Есть типизированные данные DataSetFruit для отображения DataGridView'ом. В базе данные хранятся в "сжатой" форме. Например, в таблице "Фрукты" значения поля "Сорт" хранятся не в виде строк: "яблоко", "мандарин" и т. п., а в виде числа tinyint: 0, 1, 2 и т. п. Ествественно, при отображении данных в DataGridView'е наблюдаем числа. Сопоставление строка-числа нам известно. Вопрос в том, как сделать некую предварительную обработку входящих "сжатых" данных для корректного отображения в DataGridView'е?

Автор: dextermd 18.4.2012, 21:08
Насколько я понимаю это проект WinForms ? Приведите код в котором вы заполняете DataGridView данными.

Автор: IQDDD 18.4.2012, 21:28
Код

            SqlCeConnection connection = new SqlCeConnection(@"Data source=..\..\Databasegames.sdf");
            connection.Open();
            this.gamesTableAdapter.Connection = connection;
            gamesTableAdapter.Fill(gamesDataSet.Games);

Автор: dextermd 19.4.2012, 00:43
gamesTableAdapter это DataGridView ?

Автор: Veitmen 19.4.2012, 08:56
Привет.

Существует несколько подходов для решения этой задачи. Различаются они тем, в какой момент ты будешь получать связанные данные. 

В целом, более верно было бы решить эту задачу следующим образом. В БД создается таблица ТипФруктов. В этой таблице есть колонки Id и Name. Id - первичный ключ, Name - имя сорта. И в таблице Фрукты создать внешний ключ на таблицу ТипФруктов. Т.е. каждая запись таблицы Фрукты, будет содержать ссылку на ТипФруктов. Таким образом пользователь может легко добавлять типы фруктов в ваше приложение. При использовании такого подхода, не составит труда вытащить имя сорта используя SQL.
Код

select * from Фрукты as fr join ТипФруктов as typefr on (fr.FKТипФруктов = typefr.Id)

Т.е. вы уже получите все необходимые данные.

Но если вы все же решили просто загрузить данные в ячейку грида, то делаем следующим образом.

1. Включаем у грида VirtualMode = true
2. Подписываемся на событие грида CellValueNeeded
3. Добавляем UnboundColumn в грид
4. В обработчике реализуем логику загрузки данных в ячейку по вашему идентификатору
Пример:
Код

 var people = peopleBindingSource[e.RowIndex] as People;
            if (people != null)
            {
                e.Value = people.Name + " " + people.LastName;
            }

В примере в ячейку кладется полное имя человека.

Да, советую использовать DataBindingSource. В примере он используется.

Добавлено через 3 минуты и 6 секунд
Цитата(dextermd @ 19.4.2012,  00:43)
gamesTableAdapter это DataGridView ?

Нет. Это DataAdapter.

Добавлено через 7 минут и 1 секунду
Да, и почитайте чуть больше про виртуальный режим. А то я вам его предложил, а о последствиях не предупредил. smile

http://msdn.microsoft.com/ru-ru/library/system.windows.forms.datagridview.virtualmode.aspx

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)