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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ComboBox + dataBinding??? 
:(
    Опции темы
shark1
Дата 6.11.2008, 00:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Подскажите плиззз,вот так заполняю combobox,
Код :
Код

conn1 = new OleDbConnection();
                    conn1.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Data\\Client_DB.mdb";
                    //create data adapter
                    adapter1 = new OleDbDataAdapter("SELECT DISTINCT ClientName FROM  TBL_Clients", conn1);
                     //Create a Dataset
                    ds1=new DataSet();
                    dataTable1 = ds1.Tables.Add("Clients");
                    adapter1.Fill(ds1, "Clients");

                    cmb_ClientName.DataSource = ds1.Tables["Clients"];
                    cmb_ClientName.DisplayMember = "ClientName";
                    cmb_ClientName.ValueMember = "ClientName";
                    cmb_ClientName.SelectedIndex = -1;

А теперь как сделать,чтоб при выборе чего нибудь из combobox-а в соответствии заполнялись информацией textbox-ы.
Вот например в datagridview если я делаю так :
Код

this.txt_CompNameNew.DataBindings.Add("Text", dataTable, "CompanyName", true, DataSourceUpdateMode.OnPropertyChanged);                   
                  this.txt_CompNameMail.DataBindings.Add("Text", dataTable, "CompanyName", true, DataSourceUpdateMode.OnPropertyChanged);                    
                    this.txt_ClientNameMail.DataBindings.Add("Text", dataTable, "ClientName", true, DataSourceUpdateMode.OnPropertyChanged);

то все работает.
А как такоеже сделать с combobox-ом.Зарание спасибо. 
PM MAIL   Вверх
Bogdan1024
Дата 6.11.2008, 01:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1436
Регистрация: 28.9.2005
Где: Киев

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



Ну. На событии SelectedIndexChanged тяни данные и записывай их в текстбоксы. Не?


--------------------
user posted image
PM MAIL   Вверх
shark1
Дата 6.11.2008, 02:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А как тянуть то smile ???
PM MAIL   Вверх
Nestap
Дата 6.11.2008, 10:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



shark1

а не лехче исползуть DataReader чем адаптер?


--------------------
<?    echo "Nestap";?>
PM WWW ICQ Skype Jabber   Вверх
jorikdima
Дата 6.11.2008, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 18.1.2008
Где: Там, где Зенит

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



Цитата(shark1 @ 6.11.2008,  02:46)
А как тянуть то smile ???

Зная индекс, знаешь ряд в таблице.
PM MAIL   Вверх
informatik
Дата 6.11.2008, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Вообще все должно также работать...

Только в запрос нужно включать те поля которые вы хотите отображать в текстбоксах..

--------------------
namespace informatik
PM MAIL   Вверх
shark1
Дата 7.11.2008, 00:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



киньте примерчик.Спасибо.
PM MAIL   Вверх
informatik
Дата 7.11.2008, 08:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Код

         SqlConnection con = new SqlConnection("Строка подключения");
            SqlCommand cmd = new SqlCommand("SELECT PK, NAME, FNAME FROM Таблица",con);
            SqlDataAdapter da = new SqlDataAdapter(cmd);

            DataSet ds = new DataSet("DS");
            ds.Tables.Add("Table");

            da.Fill(ds.Tables["Table"]);

            comboBox1.DataSource = ds.Tables["Table"];
            comboBox1.DisplayMember = "NAME";
            comboBox1.ValueMember = "PK";

            textBox1.DataBindings.Add("Text",ds.Tables["Table"],"PK");
            textBox2.DataBindings.Add("Text",ds.Tables["Table"],"NAME");
            textBox3.DataBindings.Add("Text",ds.Tables["Table"],"FNAME");


Это сообщение отредактировал(а) informatik - 7.11.2008, 08:10
--------------------
namespace informatik
PM MAIL   Вверх
shark1
Дата 7.11.2008, 09:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Спасибо большое я попробовал,и вот выдаёт такую ошибку :
"System.ArgumentException was unhandled
  Message="Cannot bind to the property or column CompanyName on the DataSource.\r\nParameter name: dataMember"
Код:
Код

conn1 = new OleDbConnection();
                    conn1.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Data\\Client_DB.mdb";
                    command1 = new OleDbCommand("SELECT DISTINCT  ClientName FROM  TBL_Clients", conn1);
                    adapter1 = new OleDbDataAdapter(command1);

                    ds1 = new DataSet("DS");
                    ds1.Tables.Add("NewClients");

                    adapter1.Fill(ds1.Tables["NewClients"]);

                    cmb_ClientName.DataSource = ds.Tables["NewClients"];
                    cmb_ClientName.DisplayMember = "ClientName";
                    cmb_ClientName.ValueMember = "ID";

                    
                    this.txt_CompNameNew.DataBindings.Add("Text", ds1.Tables["NewClients"], "CompanyName");

Подскажите в чём причина.
Mожет в запросе,но мне нужно делать так "SELECT DISTINCT  ClientName FROM  TBL_Clients" потому что в Базе есть повторяющиеся ClientName,а так запрос их сортирует и убирает дубликаты.Спасибо.
PM MAIL   Вверх
informatik
Дата 7.11.2008, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Я же вам говорил что нужно включать в запрос поля которые хотите отображать! А как иначе то? Чтобы посмотреть данные их нужно получить.

Напишите вот так
Код

command1 = new OleDbCommand("SELECT DISTINCT  ClientName, CompanyName, ID FROM  TBL_Clients", conn1);


Загружать нуно все поля которые используете..
--------------------
namespace informatik
PM MAIL   Вверх
shark1
Дата 7.11.2008, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ok,я поменял строку запроса
Код

conn1 = new OleDbConnection();
                    conn1.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Data\\Client_DB.mdb";
                    command1 = new OleDbCommand("SELECT DISTINCT ClientName, CompanyName, ID   FROM  TBL_Clients", conn1);
                    adapter1 = new OleDbDataAdapter(command1);

                    ds1 = new DataSet();
                    ds1.Tables.Add("NewClients");

                    adapter1.Fill(ds1.Tables["NewClients"]);

                    cmb_ClientName.DataSource = ds.Tables["NewClients"];
                    cmb_ClientName.DisplayMember = "ClientName";
                    cmb_ClientName.ValueMember = "ID";

                    this.textBox2.DataBindings.Clear();
                    textBox2.DataBindings.Add("Text", ds1.Tables["NewClients"], "ID");
                    this.txt_CompNameNew.DataBindings.Clear();
                    this.txt_CompNameNew.DataBindings.Add("Text", ds1.Tables["NewClients"], "CompanyName");
                    this.cmb_ClientName.DataBindings.Clear();
                    this.cmb_ClientName.DataBindings.Add("Text", ds1.Tables["NewClients"], "ClientName");

и у меня почему то в combobox-е только одно первое значение из базы,а где остальные ???
Спасибо.
PM MAIL   Вверх
thomas
Дата 7.11.2008, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент... почти
***


Профиль
Группа: Завсегдатай
Сообщений: 1385
Регистрация: 3.10.2006
Где: " Сказочное королевство"

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



shark1
Приветик.
Я лично комбобоксы в цикле заполняю.
Код

//invullen ComboBoxen 
foreach (DataRow dr in ds.Tables["klanten"].Rows)
{
    cmbKlant.Items.Add(dr["Naam klant"]); 
}

Т.е. из БД в таблицу ДатаСет считываю данные, а потом из колонки имена клиентов беру имена, в цикле пробегаюсь по строкам и заношу данные в комбо бокс.
Все.

Удачи.  smile  

Это сообщение отредактировал(а) thomas - 7.11.2008, 09:54


--------------------
Крепко жму горло, искренне ваш Thomas. (С)vingrad
Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну!
Проблемы негров шерифа не волнуют.
PM MAIL   Вверх
shark1
Дата 7.11.2008, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Я с этим разобрался,теперь вижу всех,но Что то не так как надо.Например я добавил трёх клиентов.
Например:
name :1
compname:1
name:2
compname:2
name:3
comppname:3
вопервых получаю срау в combobox последнюю запись и соответственно в textbox_comname бандинг.Но вот если я выбираю какую то запись из combobox-а ,то одна из трех теряется(исчезает),а выбранных становится две :(,что за ....Спасибо.
Неувидел thomas кинь примерчик плиззз.Спасибо.

Это сообщение отредактировал(а) shark1 - 7.11.2008, 10:14
PM MAIL   Вверх
informatik
Дата 7.11.2008, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Код

и у меня почему то в combobox-е только одно первое значение из базы,а где остальные ???


Если так происходит, то возможно все ваши значения во всех строках таблицы идентичны даже по ID, что неприемлемо(по ID).

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

И т.к. вы хотите выбрать не повторяющиеся значения по полю ClientName (хотя судя по названию поля в выборе не повторяющихся значений по нему не вижу смысла).


Возможно вы показываете не весь код и ошибка где то за пределами мной увиденного....

Добавлено через 10 минут и 23 секунды
Цитата

вопервых получаю срау в combobox последнюю запись и соответственно в textbox_comname бандинг.Но вот если я выбираю какую то запись из combobox-а ,то одна из трех теряется(исчезает),а выбранных становится две :(,что за ....Спасибо.


Думаю теперь можно практически на 100% быть уверенным что ошибка не в том коде который вы представляете...
--------------------
namespace informatik
PM MAIL   Вверх
shark1
Дата 7.11.2008, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Хм :( вот весь код,
Код

private void tabControl1_Selecting(object sender, TabControlCancelEventArgs e)
        {
            try
            {

                if (tabControl1.SelectedTab == tabPage2)
                {                    
                    /////
                    ///// Fill ComboBox
                    /////
                    conn1 = new OleDbConnection();
                    conn1.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Data\\Client_DB.mdb";
                    command1 = new OleDbCommand("SELECT DISTINCT ClientName, CompanyName, ID   FROM  TBL_Clients", conn1);
                    adapter1 = new OleDbDataAdapter(command1);

                    ds1 = new DataSet("DS");
                    ds1.Tables.Add("NewClients");

                    adapter1.Fill(ds1.Tables["NewClients"]);

                    cmb_ClientName.DataSource = ds1.Tables["NewClients"];
                    cmb_ClientName.DisplayMember = "ClientName";
                    cmb_ClientName.ValueMember = "ID";
                   

                    //cmb_ClientName.SelectedIndex = -1;

                    //this.textBox2.DataBindings.Clear();
                    this.textBox2.DataBindings.Add("Text", ds1.Tables["NewClients"], "ID");
                    //this.cmb_ClientName.DataBindings.Clear();
                    this.cmb_ClientName.DataBindings.Add("Text", ds1.Tables["NewClients"], "ClientName");
                    //this.txt_CompNameNew.DataBindings.Clear();
                    this.txt_CompNameNew.DataBindings.Add("Text", ds1.Tables["NewClients"], "CompanyName");
                    
                  }

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }

другого нет
PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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