Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
Kaberungula
0 / 0 / 1
Регистрация: 24.05.2016
Сообщений: 47
1

Связь comboBox и textBox

07.07.2016, 15:35. Просмотров 643. Ответов 6
Метки нет (Все метки)

Есть таблица Printer, имеет структуру:
Print_ID (PK)
Print_Name
Dept
Данные из Dept выводятся в комбобокс.
Как сделать, чтобы при выборе значения в комбобоксе, в текстбоксе выводилось print_name?

Код на данный момент
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
            string baseName = "Printers.db3";
            using (var connection = new SQLiteConnection())
            {
                connection.ConnectionString = "Data Source = " + baseName;
                SQLiteCommand command = new SQLiteCommand("select * from Printer", connection);
                connection.Open();
                DbDataReader reader = command.ExecuteReader();
                while (reader.Read())
                {
                    comboBox1.Items.Add((string)reader["Dept"].ToString());         //СтолбецТаблицы
                }
                connection.Close();
            }
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.07.2016, 15:35
Ответы с готовыми решениями:

Связь combobox со связанными таблицами
Доброго времени суток! Поставил 2 combobox. В одной отображаются наименования региона, код региона...

Как разорвать связь между двумя ComboBox?
Здравствуйте. Начинаю разбираться с программированием. Возникла проблема. Есть база данных в C#....

Связь ComboBox с DataGridView, где находятся данные из БД Access
Добрый вечер форумчане. Интересует следующий вопрос. Как реализовать связь combobox(привязаны...

Связь между двумя формами. передача данных из combobox в DataGridView
Есть две формы. На первой - находятся 3 комбобокса (профиль-группа-студенты),заполненные данными из...

DataTable textbox combobox
Есть кобмобокс который привязан к dataset есть несколько текстбоксов, есть несколько кнопок...

6
Даценд
Модератор
Эксперт .NET
4405 / 4085 / 2698
Регистрация: 20.04.2015
Сообщений: 7,414
07.07.2016, 16:23 2
Kaberungula,
Я думаю, что никак.
В комбобокс заносится список значений поля Dept (предполагаю, что это подразделения). Это поле не является ключом, и значения будут повторяться, если в одном подразделении насколько принтеров. Т.е. в комбобоксе значения тоже будут повторяться. Можно было бы воспользоваться значением поля Print_ID и через него построить sql запрос типа
SQL
1
SELECT Print_Name FROM Printer WHERE Print_ID = значению_Print_ID_выбранного_в_комбобоксе_элемента
Но проблема в том, что комбобокс ничего об этом поле не знает.
В отличии от способа, предложенного в Загрузка столбца в combobox
0
insite2012
Модератор
Эксперт .NET
4878 / 3831 / 1096
Регистрация: 12.10.2013
Сообщений: 11,101
Записей в блоге: 2
07.07.2016, 19:49 3
Цитата Сообщение от Kaberungula Посмотреть сообщение
при выборе значения в комбобоксе, в текстбоксе выводилось print_name?
Типа того?
Модель для БД:
C#
1
2
3
4
5
6
7
8
9
10
11
12
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace PrinterTest {
    public class PrinterObj {
        public int PrintID { get; set; }
        public string PrintName { get; set; }
        public string Dept { get; set; }
    }
}
Класс для БД:
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Data;
using System.Data.SQLite;
 
namespace PrinterTest {
    public class SQLiteHelper {
        static string CONNECT_STR = string.Empty;
        static SQLiteHelper() {
            CONNECT_STR = string.Format("Data Source={0}",
                Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "database.sqlite"));
        }
 
        public PrinterObj[] GetPrinters() {
            string selectCmd = "SELECT * FROM Printers";
            List<PrinterObj> printers = new List<PrinterObj>();
            using (SQLiteConnection cnn = new SQLiteConnection(CONNECT_STR)) {
                cnn.Open();
                using (SQLiteCommand cmd = new SQLiteCommand(selectCmd, cnn)) {
                    using (SQLiteDataReader dr = cmd.ExecuteReader()) {
                        while (dr.Read()) {
                            printers.Add(new PrinterObj {
                                PrintID=int.Parse(dr["printId"].ToString()),
                                PrintName=(string)dr["printName"],
                                Dept=(string)dr["dept"]
                            });
                        }
                    }
                }
            }
            return printers.ToArray();
        }
    }
}
Код формы (на форме combobox и textbox):
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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace PrinterTest {
    public partial class Form1 : Form {
        PrinterObj[] printers = null;
 
        public Form1() {
            InitializeComponent();
            this.Load += new EventHandler(Form1_Load);
            cmbDept.SelectedValueChanged += new EventHandler(cmbDept_SelectedValueChanged);
        }
 
        void cmbDept_SelectedValueChanged(object sender, EventArgs e) {
            string[] names = printers.Where(p => p.Dept == cmbDept.Text).Select(p => p.PrintName).ToArray();
            txtNames.Lines = names;
        }
 
        void Form1_Load(object sender, EventArgs e) {
            SQLiteHelper dbHelper = new SQLiteHelper();
            printers = dbHelper.GetPrinters();
            cmbDept.Items.AddRange(printers.Select(p => p.Dept).ToArray());
        }
    }
}
0
Kaberungula
0 / 0 / 1
Регистрация: 24.05.2016
Сообщений: 47
08.07.2016, 10:50  [ТС] 4
А возможно ли из ридера загрузить значения в массив и вытягивать значения по индексу?

Добавлено через 14 часов 33 минуты
Подскажите, как написать грамотно этот участок?
C#
1
2
3
4
5
6
DbDataReader reader = command.ExecuteReader();
                while (reader.Read())
                {
                    string sDept  = reader.GetString["Dept"];
                    comboBox1.Items.Add(sDept);
                }
Выдает ошибку "Невозможно применить индексирование через [] к выражению типа "группа методов""
0
Igr_ok
418 / 390 / 185
Регистрация: 04.08.2015
Сообщений: 1,072
08.07.2016, 12:02 5
Цитата Сообщение от Kaberungula Посмотреть сообщение
А возможно ли из ридера загрузить значения в массив и вытягивать значения по индексу?
Пользуйтесь вместо ридера DataAdapter-ом и загружайте данные в DataTable.
Цитата Сообщение от Kaberungula Посмотреть сообщение
Выдает ошибку "Невозможно применить индексирование через [] к выражению типа "группа методов""
Нет такого метода. Так нужно:
C#
1
reader.GetString(0);
, где 0 - номер столбца.
0
Kaberungula
0 / 0 / 1
Регистрация: 24.05.2016
Сообщений: 47
12.07.2016, 14:18  [ТС] 6
Не много подразобрался как связывать комбобокс с текстбоксом... Но теперь нужно как-то сделать, чтоб при выборе в комбобоксе отдела, появлялись разные имена принтеров в текстбоксах, т.к есть некоторые отделы с несколькими принтерами. Как это можно реализовать?

Добавлено через 2 часа 0 минут
Так понимаю, тут нужно уже будет делать связь в БД "от одно(dept) к многим(printer)" данные будут в двух таблицах. Но дальше то как? Подскажите алгоритм, а то уже голова разрывается)
0
Даценд
Модератор
Эксперт .NET
4405 / 4085 / 2698
Регистрация: 20.04.2015
Сообщений: 7,414
12.07.2016, 20:22 7
Цитата Сообщение от Kaberungula Посмотреть сообщение
Но теперь нужно как-то сделать, чтоб при выборе в комбобоксе отдела, появлялись разные имена принтеров в текстбоксах, т.к есть некоторые отделы с несколькими принтерами. Как это можно реализовать?
Цитата Сообщение от Даценд Посмотреть сообщение
Это поле не является ключом, и значения будут повторяться, если в одном подразделении насколько принтеров.
Приведите в порядок схему БД
0
12.07.2016, 20:22
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.07.2016, 20:22

Поиск по БД из textBox, combobox
Объясните пожалуйста как показать данные столбца из таблицы через Combobox, смотрела разные сайты,...

Поиск по БД из textBox, combobox
Подскажите пж код или ссылки для поиска данных в БД. Использую данный код CSHARP] private void...

Как связать TextBox с ComboBox?
Всем привет! Поясните пожалуйста на простом примере как сделать зависимым TextBox от ComboBox. Есть...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru