Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ComboBox-колонка в гриде, привязанная к данным 
V
    Опции темы
opozdaika
Дата 3.9.2008, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 28.4.2008

Репутация: нет
Всего: нет



На форме есть грид DataGridView, привязанный к данным. Одна из колонок есть ComboBox, привязанный к одному из полю данных. В поле хранится ЧИСЛО (ключ), а в комбобоксе нужно видеть ТЕКСТ, соответствующий этому ключу. Например, 1 - это "Чай", 2 - "Кофе" 3 - "Сок". Я пробую создать класс MyItem, представляющий элемент списка, и в нем связать число и текст.

Код

      DataGridView MyGrid;  // Это грид на форме
      //...
      class MyItem  // Пытаюсь сделать класс-переходник для представления одного элемента списка
        {
            private string Name;  // Этот текст - одна строка списмка комбобокса
            public int Num;  //  Это число, которое хранится в данных вместо текста

            // Конструктор
            public MyItem(string Name_, int Num_)  {  Name = Name_;   Num = Num_;  }

           //  Чтобы видеть в строках комбобокса текст
            public override string  ToString() { return Name; }  
        }

       private void Init()  // Эта функция настраивает грид
        {
            MyGrid.DataSource = ... ;  // Привязали грид к данным

            MyGrid.Columns[1].DataPropertyName = "XXX";  // Привязали ComboBox-колону к полю данных (оно хранит ЧИСЛО, а не текст!!!)

            //   Заполняем строки комбобокса
            DataGridViewComboBoxCell.ObjectCollection Items = ((DataGridViewComboBoxColumn)MyGrid.Columns[1]).Items;
            Items.Clear();
            Items.Add(new MyItem("Чай" , 0));    // Хочу, чтобы вместо унылого "0" в гриде писалось веселое "Чай"
            Items.Add(new MyItem("Кофе", 1));
            Items.Add(new MyItem("Сок", 2));
        }

Но чего-то явно не хватает, т.к. я нигде не задал, что именно член Num должен быть связан с данными. Как сделать? Помогите!!!
PM MAIL   Вверх
Wanderer2019
Дата 3.9.2008, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 937
Регистрация: 3.12.2004
Где: Санкт-Петербург/П рага

Репутация: 2
Всего: 17



а к чему такие извращения то?
Сделай выборку, где помимо id будет и название этого элемента (чай, кофе и т.д.) и подставляй себе на здоровье.
PM ICQ MSN   Вверх
opozdaika
Дата 4.9.2008, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 28.4.2008

Репутация: нет
Всего: нет



Цитата(Wanderer2019 @ 3.9.2008,  18:37)
Сделай выборку, где помимо id будет и название этого элемента (чай, кофе и т.д.) и подставляй себе на здоровье.

У меня источник данных - не SQL, а BindingList<>, поэтому  сделать выборку не так просто. Я хотел бы, чтобы был lookup на уровне UI
PM MAIL   Вверх
Wanderer2019
Дата 4.9.2008, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 937
Регистрация: 3.12.2004
Где: Санкт-Петербург/П рага

Репутация: 2
Всего: 17



Ну пусть будет так. Тогда подпишись на событие RowBound этого грида и в момент добавления очередной строки подставляй туда что тебе хочется.
PM ICQ MSN   Вверх
opozdaika
Дата 4.9.2008, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 28.4.2008

Репутация: нет
Всего: нет



Цитата(Wanderer2019 @ 4.9.2008,  11:07)
подпишись на событие RowBound этого грида

В моем гриде DataGridView  .NET Framework 3.5 событие RowBound отсутствует
PM MAIL   Вверх
opozdaika
Дата 4.9.2008, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 28.4.2008

Репутация: нет
Всего: нет



Я вот тут разобрался. Все правильно я делал. Не хватало только вот такого кода:
Код

         comboboxColumn.ValueMember = "NumProp";
         comboboxColumn.DisplayMember = "NameProp";


Это сообщение отредактировал(а) opozdaika - 4.9.2008, 17:07
PM MAIL   Вверх
Reaf
Дата 8.9.2008, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 28.11.2006
Где: Москва

Репутация: нет
Всего: нет



Еще можно событие CellFormatting Грида использовать.

А потом, либо с помощью if, либо с помощью switch заполнять условия.

Код

if (row.Data == 1)
{
    e.Value = "Чай";
}
    
                        
PM MAIL ICQ MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0700 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.