Форум программистов, компьютерный форум, киберфорум
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/75: Рейтинг темы: голосов - 75, средняя оценка - 4.69
28 / 8 / 1
Регистрация: 26.05.2010
Сообщений: 230
1

Привязка данных к ComboBox

31.01.2011, 10:04. Показов 13585. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
На форме есть 2 ComboBox, привязанных к одной таблице. При выборе элемента в одном ComboBox этот же элемент выбирается и в другом. Как от этого избавиться? Привязываю данные таким образом

C#
1
2
3
4
5
6
comboBox3.DataSource = this.dsTechReg2Test.Location_Area;
comboBox3.DisplayMember = "Area_Name";
comboBox3.ValueMember = "Area_ID";
comboBox4.DataSource = this.dsTechReg2Test.Location_Area;
comboBox4.DisplayMember = "Area_Name";
comboBox4.ValueMember = "Area_ID";
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.01.2011, 10:04
Ответы с готовыми решениями:

привязка данных к ComboBox
Может плохо искал, но гугл не помог(( Вопрос таков: Есть база данных спортсменов: Таблица...

Combobox и привязка данных
Всем привет в VS создаю новое приложение, добавляю базу данных SQL с 2умя таблицами, в источнике...

Привязка базы данных к ComboBox
Здравствуйте!Есть вот такой вопрос: В комбобоксе есть 3 группы людей.Для каждой из этих групп есть...

Привязка combobox и textbox к базе данных
Здравствуйте! Пишу программу с одной базой данных, в которой несколько таблиц. Хочу вводить данные...

11
339 / 285 / 62
Регистрация: 02.09.2010
Сообщений: 547
31.01.2011, 10:25 2
А выбор каким кодом осуществляется? А то похоже, что у вас отклик комбобоксов в одном куске {}идет.
0
28 / 8 / 1
Регистрация: 26.05.2010
Сообщений: 230
31.01.2011, 10:29  [ТС] 3
Filislav, когда пользователь выбрал значение каждого ComboBox, жмется баттон, в котором прописывается сохранение результатов из ComboBoxN.Text. Тут работает все. Проблема в том, что когда выбираем значение в одном боксе, например, "1 зона", в другом автоматически выставляется то же значение. Соответственно, когда меняем значение во втором, меняется и в первом. А мне нужно оба одновременно использовать
0
339 / 285 / 62
Регистрация: 02.09.2010
Сообщений: 547
31.01.2011, 15:16 4
А можно код формы с комбобоксами посмотреть?
0
28 / 8 / 1
Регистрация: 26.05.2010
Сообщений: 230
31.01.2011, 15:50  [ТС] 5
Filislav, конечно
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.Linq;
using System.Data.SqlClient;
using System.Drawing;
using System.IO;
using System.Windows.Documents;
using Microsoft.Office.Interop.Excel;
using System.Text;
using System.Windows.Interop;
using System.Windows.Forms;
using System.Linq;
 
 
 
namespace TechReg2Test
{
    public partial class CableLinkEdit : Form
    {
        TechReg2TestDataSet dsTechReg2Test = new TechReg2TestDataSet();
        TechReg2TestDataSetTableAdapters.Cable_LinkTableAdapter daCable_Link =
            new TechReg2Test.TechReg2TestDataSetTableAdapters.Cable_LinkTableAdapter();
        TechReg2TestDataSetTableAdapters.Location_AreaTableAdapter daLocation_Area =
            new TechReg2Test.TechReg2TestDataSetTableAdapters.Location_AreaTableAdapter();
        TechReg2TestDataSetTableAdapters.Location_TitleTableAdapter daLocation_Title =
            new TechReg2Test.TechReg2TestDataSetTableAdapters.Location_TitleTableAdapter();
        
        public CableLinkEdit()
        {
            InitializeComponent();
        }
 
        public void CableLinkFill()
        {
            daLocation_Area.Fill(dsTechReg2Test.Location_Area);
            daLocation_Title.Fill(dsTechReg2Test.Location_Title);
            
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            //Добавить каб. связь
 
            SqlConnection SqlConnection1 = new SqlConnection(Properties.Settings.Default.PhoneConnectionString);
            SqlCommand cmd11 = new SqlCommand();
            SqlCommand cmd12 = new SqlCommand();
            SqlDataReader reader11;
            SqlDataReader reader12;
            cmd11.CommandText = "select Object_ID from Object where (Object_Type_ID = (select Object_Type_ID from Object_Type where Prefix = '"+ comboBox1.Text +"')) " +
                " and (Location_ID = (select Location_ID from Location where (Area_ID = (select Area_ID from Location_Area where Area_Name = '" + comboBox3.Text + "')) " +
                " and (Title_ID = (select Title_ID from Location_Title where Title_Name = '" + comboBox4.Text + "')))) and (Object_Num = '"+ Convert.ToInt32(numericUpDown1.Value) +"')";
            cmd12.CommandText = "select Object_ID from Object where (Object_Type_ID = (select Object_Type_ID from Object_Type where Prefix = '" + comboBox2.Text + "')) " +
                " and (Location_ID = (select Location_ID from Location where (Area_ID = (select Area_ID from Location_Area where Area_Name = '" + comboBox5.Text + "')) " +
                " and (Title_ID = (select Title_ID from Location_Title where Title_Name = '" + comboBox6.Text + "')))) and (Object_Num = '" + Convert.ToInt32(numericUpDown2.Value) + "')";
            cmd11.Connection = SqlConnection1;
            cmd12.Connection = SqlConnection1;
            SqlConnection1.Open();
            reader11 = cmd11.ExecuteReader();
            reader11.Read();
            int ObjFromID = (int)reader11[0];
            reader11.Dispose();
            reader12 = cmd12.ExecuteReader();
            reader12.Read();
            int Obj_To_ID = (int)reader12[0];
            reader12.Dispose();
            SqlConnection1.Close();
 
            DataRow cablelinkRow = dsTechReg2Test.Cable_Link.NewRow();
            cablelinkRow["ObjectFrom_ID"] = ObjFromID;
            cablelinkRow["CellFromNachalnNum"] = Convert.ToInt32(numericUpDown3.Value);
            cablelinkRow["ObjectTo_ID"] = Obj_To_ID;
            cablelinkRow["CellToNachalnNum"] = Convert.ToInt32(numericUpDown5.Value);
            cablelinkRow["CapacityofCable_link"] = Convert.ToInt32(numericUpDown4.Value);
            cablelinkRow["CommentofCable_link"] = textBox1.Text;
            dsTechReg2Test.Cable_Link.Rows.Add(cablelinkRow);
            daCable_Link.Update(cablelinkRow);
            dsTechReg2Test.Cable_Link.AcceptChanges();
            daCable_Link.Fill(dsTechReg2Test.Cable_Link);
            //cablelinkRow[""] = 
        }
 
        private void CableLinkEdit_Load(object sender, EventArgs e)
        {
            CableLinkFill();
            comboBox3.DataSource = this.dsTechReg2Test.Location_Area;
            comboBox3.DisplayMember = "Area_Name";
            comboBox3.ValueMember = "Area_ID";
            comboBox4.DataSource = this.dsTechReg2Test.Location_Title;
            comboBox4.DisplayMember = "Title_Name";
            comboBox4.ValueMember = "Title_ID";
            comboBox6.DataSource = this.dsTechReg2Test.Location_Title;
            comboBox6.DisplayMember = "Title_Name";
            comboBox6.ValueMember = "Title_ID";
            
              
        }
    }
}
0
339 / 285 / 62
Регистрация: 02.09.2010
Сообщений: 547
31.01.2011, 18:47 6
Хм, даже не знаю, и в твоем коде я тоже ничего такого не увидел.
1
6048 / 3457 / 335
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
31.01.2011, 21:05 7
Цитата Сообщение от Chimera_ Посмотреть сообщение
Проблема в том, что когда выбираем значение в одном боксе, например, "1 зона", в другом автоматически выставляется то же значение. Соответственно, когда меняем значение во втором, меняется и в первом. А мне нужно оба одновременно использовать
Такая проблема обычно возникает, когда для обоих комбиков выбирается в качестве источника один BindingSource. Но в данном случае BindingSource не используется, прям загадка какая-то.
1
28 / 8 / 1
Регистрация: 26.05.2010
Сообщений: 230
01.02.2011, 06:25  [ТС] 8
nio, как привязаться через BindingSource? Я так поняла, если их сделать 2 к одной и той же таблице и для каждого комбо использовать свой, моя проблема исчезнет?
0
6048 / 3457 / 335
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
01.02.2011, 09:28 9
Цитата Сообщение от Chimera_ Посмотреть сообщение
если их сделать 2 к одной и той же таблице и для каждого комбо использовать свой, моя проблема исчезнет?
Chimera_, теоритически да. Но даже при выше приведенном коде ее быть не должно.
Сейчас некогда, вечером подумаю
0
28 / 8 / 1
Регистрация: 26.05.2010
Сообщений: 230
01.02.2011, 10:34  [ТС] 10
nio, Filislav, я нашла решение!
C#
1
2
3
4
5
6
7
8
9
10
11
private void CableLinkEdit_Load(object sender, EventArgs e)
        {
            CableLinkFill();
            comboBox4.DataSource = this.dsTechReg2Test.Location_Title;
            comboBox4.DisplayMember = "Title_Name";
            comboBox4.ValueMember = "Title_ID";
            foreach (System.Data.DataRow row in dsTechReg2Test.Location_Title.Rows)
            {
                comboBox6.Items.Add(Convert.ToString(row["Title_Name"]));
            }
        }
Один комбо заполняем через DataSource, а другой через коллекцию. Наверное, можно еще как-то, но я более простых способов не нашла
0
69 / 3 / 1
Регистрация: 01.06.2011
Сообщений: 8
15.03.2012, 14:04 11
Тоже столкнулся с этой проблемой, нашел как мне кажется более изящное решение. Создаем еще одну таблицу и копируем в нее исходную таблицу, а дальше ко 2му комбобоксу биндим вновь созданную таблу:
C#
1
2
3
4
5
6
7
DataTable dtConsumerAlt = dtConsumer.Copy();
cmbConsumer.DisplayMember = "Consumer";
cmbConsumer.ValueMember = "ConsumerID";
cmbConsumer.DataSource = dtConsumer;
cmbCnsm.DisplayMember = "Consumer";
cmbCnsm.ValueMember = "ConsumerID";
cmbCnsm.DataSource = dtConsumerAlt;
0
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
19.03.2012, 15:34 12
просто для каждого из боксов создаем свой BindingSorce:

C#
1
2
3
4
5
6
7
8
BindingSource b1 = new BindingSource(dsTechReg2Test, "Location_Area");
comboBox3.DisplayMember = "Area_Name";
comboBox3.ValueMember = "Area_ID";
comboBox3.DataSource = b1;
BindingSource b2 = new BindingSource(dsTechReg2Test, "Location_Area");
comboBox4.DisplayMember = "Area_Name";
comboBox4.ValueMember = "Area_ID";
comboBox4.DataSource = b2;
а создавать лишнюю копию таблицы - это загружать оперативу которая и так перегружена фреймворком

ValueMember и DisplayMember лучше указывать перед указанием DataSource.
Так как DataSource генерит SelectedIndexChanged, а данные комбобокса - пустая DataRow при неуказанных ValueMember и DisplayMember
1
19.03.2012, 15:34
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.03.2012, 15:34
Помогаю со студенческими работами здесь

Привязка Combobox к столбцу БД
Запросом я выбираю столбец из БД. Вот по нему и должен происходить выбор в ComboBox. Я хочу что...

Привязка Combobox к полям БД Access
Здравствуйте, столкнулся с такой проблемой. Есть bd, таблица и несколько combobox'ов. D В таблице...

Привязка ComboBox'a к данным конкретного столбца
Доброго времени суток. Вот такая, казалось бы, простая задача не получается. Опишу свои...

Привязка ComboBox к DataContext для отображения простых справочников
Может, я конечно и ламер, но вот застряла совсем. Есть БД в SQL Server`e, для нее создан класс...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru