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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> вставить Combobox в dataGridView, при существующей привязке dataSource 
:(
    Опции темы
v_enom
Дата 29.3.2009, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Есть такой код (динамически создаются закладки tabControl, каждой закладке соответствует свой запрос к базе и полученные из нее данные):


Код

TabPage newPage = new TabPage(tableName);

                newPage.BackColor = System.Drawing.Color.White;
               

            //-------------------- таблица из базы данных
            DataGridView dataGrid = new DataGridView();
            
               dataGrid.Anchor = ((System.Windows.Forms.AnchorStyles)(
                                       (System.Windows.Forms.AnchorStyles.Top) | (System.Windows.Forms.AnchorStyles.Left)
                                                         | (System.Windows.Forms.AnchorStyles.Right) | (System.Windows.Forms.AnchorStyles.Bottom))
                                  );                
                             
            dataGrid.Location = new System.Drawing.Point(0,0);                
            dataGrid.Dock = System.Windows.Forms.DockStyle.Fill;
            newPage.Text = connection.GetNewPageTextByTableName(tableName);

            tabControl1.TabPages.Insert(0,newPage); // вставляем новую страницу с выборкой      
            
                       
            newPage.Controls.Add(dataGrid);
               tabControl1.SelectedIndex = 0;      // и выбираем данную закладку. (она всегда нулевая в списке будет)            

            


               dataGrid.DataSource = dataTable;
               // this.Column1.AutoSizeMode = System.Windows.Forms.DataGridViewAutoSizeColumnMode.ColumnHeader;
               dataGrid.AutoResizeColumns(); // выравнивание колонок по содержимому

               //dataGrid.Rows[1].Cells[6] = new DataGridViewComboBoxCell();    ВОТ ТАК РУГАЕТСЯ УЖЕ ПРИ рисовании формы.
               

               if (tableName == "order_ordesrs")
               {
                   AddComboboxSelectionForState(dataGrid);
               }


В итоге получается таблица dataGrid. Но в этой dataGrid  для 6ой колонки надо сделать все ячейки как  combobox чтобы потом можно было выбирать параметр и отправлять его в базу для редактрования.

Возможно из-за того, что уже идет привязка к dataSource, у меня не поулчается поменять тип ячейки на combobox. 
как это сделать???? мануалы читал, но не помогло. Создавать руками для каждого запроса колонки и потом их заполнять считаю нерациональным, когда надо поменять только 1 параметр.

PM MAIL   Вверх
v_enom
Дата 29.3.2009, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



и еще один вопрос:
как предать в обработчик событий параметры???

вот событие:
Код

 tabControl1.Selecting += new System.Windows.Forms.TabControlCancelEventHandler(this.tabControl1_Selecting);

private void tabControl1_Selecting(object sender)
        {            
          
            FormEditorMenu(dataGrid, this.splitContainer1);    // надо чтобы тут можно было обрабатывать dataGrid
        }

PM MAIL   Вверх
Partizan
Дата 29.3.2009, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

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



v_enomМодератор: Пожалуйста, один топик - один вопрос.


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
-Mikle-
Дата 29.3.2009, 18:52 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

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



В дизайнере создайте колонку с нужным вам типом (ComboBox) и задайте привязку этой колонки к соответствующему полю БД


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
v_enom
Дата 29.3.2009, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(-Mikle- @  29.3.2009,  18:52 Найти цитируемый пост)
В дизайнере создайте колонку с нужным вам типом (ComboBox) и задайте привязку этой колонки к соответствующему полю БД 


Я не использую дизайнер. Страницы генерируются динамически. Как делать привязку? что вы имеете ввиду?  smile 
PM MAIL   Вверх
-Mikle-
Дата 29.3.2009, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

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



Код

            DataGridViewComboBoxColumn column = new DataGridViewComboBoxColumn();
            // для заполнения раскрывающегося списка ComboBox 
            // значениями из БД используйте эти свойства:
            //    column.DataSource
            //    column.DisplayMember
            //    column.ValueMember
            // или вручную
            //    column.Items.Add(...)
            // для привязки ComboBox к данным DataGridView, используйте
            //    column.DataPropertyName
            dataGridView1.Columns.Add(column);


Попробуйте...


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
v_enom
Дата 29.3.2009, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



-Mikle-, спасибо, но немного не то, что надо мне.....
я могу добавить колонку с комбобоксами, но это не то,что мне надо!!!! мне надо заменить уже существующую колонку где сейчас текстбокс на комбобокс + получить данные в эти комбобоксы из 2ой таблицы. Как это сделать?!!!

* заменить в dataGrid  конкретную колонку на колонку с комбобоксами (данные из dataTable)
* для нее сделать источник данных, чтобы выпадающий список выдавал результат  запроса (данные из dataTable2) к таблице 
* Как получить доступ к параметрам конкретного столбца из выборки dataTable 
* как присвоить значения по-умолчанию для недавно созданных кобобоксов в dataGrid 



Ну неужели я спрашиваю столь редкую операцию, что ли ни кто не может внятно с примером ответить????????????????????!!!!!!!!!!!!!!!!!  smile 


Еще раз: Надо  отдельный столбец таблицы dataGrid, получающей значения из источника  dataTable заполнить значениями из другой таблицы базы дынных, лежащей например в dataTable2


PS вот этот http://www.rsdn.ru/article/dotnet/DataGridView20.xml даже не рекомендуйте. фигня фигней. Примеры все "детские" и не из той оперы.

Это сообщение отредактировал(а) v_enom - 30.3.2009, 01:20
PM MAIL   Вверх
-Mikle-
Дата 30.3.2009, 14:58 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

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



Ну вот смотри:
Тебе надо чтобы после установки DataSource заменялся тип колонки. Верно?

Ниже я заменяю тип колонки col2 на тип ComboBox'а
Код

        private void button1_Click(object sender, EventArgs e)
        {
            // this.GetDataTable() - метод возвращает тестовые данные, он есть ниже
            dataGridView1.DataSource = this.GetDataTable();

            // запомним индекс удаляемой колонки (col2)
            int oldColIndex = dataGridView1.Columns["col2"].Index;
            // удаляем колонка col2
            dataGridView1.Columns.RemoveAt(oldColIndex);

            // вставим новую колонку (см.ниже метод this.GetCol2_DataGridViewColumn)
            dataGridView1.Columns.Insert(oldColIndex, this.GetCol2_DataGridViewColumn());
        }

        DataGridViewColumn GetCol2_DataGridViewColumn()
        {
            DataGridViewComboBoxColumn comboColumn = new DataGridViewComboBoxColumn();
            // this.GetCol2Table() - возвращает второй источник данных для ComboBox (см. ниже)
            comboColumn.DataSource = this.GetCol2Table();
            comboColumn.DataPropertyName = "col2";
            comboColumn.DisplayMember = "col2Display";
            comboColumn.ValueMember = "col2Value";
            return comboColumn;
        }

        // ниже, методы чисто для тестов (для примера)
        DataTable GetDataTable()
        {
            DataTable table = new DataTable();
            table.Columns.Add("col1", typeof(int));
            table.Columns.Add("col2", typeof(int));
            table.Columns.Add("col3", typeof(int));
            table.Rows.Add(1, 2, 3);
            table.Rows.Add(4, 5, 6);
            table.Rows.Add(7, 8, 9);
            return table;
        }

        DataTable GetCol2Table()
        {
            DataTable table = new DataTable();
            table.Columns.Add("col2Value", typeof(int));
            table.Columns.Add("col2Display", typeof(string));
            table.Rows.Add(0, "Zero");
            table.Rows.Add(1, "One");
            table.Rows.Add(2, "Two");
            table.Rows.Add(3, "Three");
            table.Rows.Add(4, "Four");
            table.Rows.Add(5, "Five");
            table.Rows.Add(6, "Six");
            table.Rows.Add(7, "Seven");
            table.Rows.Add(8, "Eight");
            table.Rows.Add(9, "Nine");
            return table;
        }


Только вот не понимаю зачеме тебе нужно именно заменить колонку, не лучше ли просто заранее ее создать таким образом:
Код

        private void button1_Click(object sender, EventArgs e)
        {
            dataGridView1.Columns.Add(this.GetCol2_DataGridViewColumn());
            dataGridView1.DataSource = this.GetDataTable();
        }


А еще, лучше использовать Relations для связки родительских таблиц и дочерних... Впрочем, смотри сам...

Надеюсь, это помогло?


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
v_enom
Дата 30.3.2009, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(-Mikle- @  30.3.2009,  14:58 Найти цитируемый пост)
А еще, лучше использовать Relations для связки родительских таблиц и дочерних... Впрочем, смотри сам...


Возможно и проще. Это набор функций специальных или что? где про релейшенс почитать? Ведь по сути у меня действительно связаны 2 таблицы.

А заменить мне надо колонку потому что у меня результат выборки - имя одного статуса. А мне надо в этом поле весь список статусов...чтобы поменять было можно.


PM MAIL   Вверх
-Mikle-
Дата 30.3.2009, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

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



Ну про замену я написал, надеюсь вы хотя бы попробовали код...
А про релэйшнс полно инфы, не так уж это и сложно...


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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