Аватар для FedorF
56 / 1 / 1
Регистрация: 11.06.2012
Сообщений: 51

Привязать выделенную запись в DatagridView к текстбоксам и комбобоксу

04.05.2014, 09:34. Показов 1980. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день! У меня есть БД, мне нужно загрузить данные из двух связанных таблиц (Таблица Drug и Unit_of_measure) в datagridview и при выборе конкретной записи datagridview эти записи должны отображать в двух textbox и одном combobox. Делаю это так:

C#
1
2
3
4
5
6
7
8
9
10
11
SqlConnection con = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\Users\\Elena\\Desktop\\ГОСЫ и ДИПЛОМ\\07.04.2014\\DB1.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
        SqlCommand cmd = new SqlCommand();
 
        SqlDataAdapter da = new SqlDataAdapter();
        DataSet ds = new DataSet();
        SqlCommandBuilder cb;
        
        con.Open();
        cmd = new SqlCommand("SELECT Drug.ID_drug AS 'Номер препарата', Drug.Name AS 'Название', Unit_of_measure.Name AS 'Единица измерения' FROM Drug, Unit_of_measure WHERE Drug.ID_unit = Unit_of_measure.ID_unit ", con);
        da = new SqlDataAdapter(cmd);
        da.Fill(ds, "Unit_of_measure, Drug");


Пытаюсь привязать так:
C#
1
2
3
4
5
6
            dataGridView1.DataSource = ds;
            dataGridView1.DataMember = "Unit_of_measure, Drug";
 
            textBox1.DataBindings.Add("Text", ds, "Drug.ID_drug");
            textBox2.DataBindings.Add("Text", ds, "Drug.Name");
            comboBox1.DataBindings.Add("Text", ds, "Unit_of_measure.Name");
Не получается, но когда работала с одной таблицей, все отлично получалось
Миниатюры
Привязать выделенную запись в DatagridView к текстбоксам и комбобоксу   Привязать выделенную запись в DatagridView к текстбоксам и комбобоксу  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.05.2014, 09:34
Ответы с готовыми решениями:

Как записать в переменную выделенную строку DataGridView?
Как записать выделенную строку в переменную ???

Как привязать к комбобоксу динамически изменяющийся список Excel
Как привязать к комбобоксу динамически изменяющийся список Excel, чтобы содержимое ComboBox - а менялось в зависимости от этого...

DatagridView - получить выделенную область
Как мне узнать область которая была выделенная? Вот индексы ячейки(колонки/рядка) dataGridView1.CurrentCell.index ...

23
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
04.05.2014, 22:03
Лучший ответ Сообщение было отмечено FedorF как решение

Решение

Студворк — интернет-сервис помощи студентам
DataGridView у меня заполняется вот с такими строками:
C#
1
2
3
4
5
            SqlCommand drug_cmd = new SqlCommand("SELECT ID_drug, Name, ID_unit FROM dbo.Drug", con);
...
            SqlCommand unit_cmd = new SqlCommand("SELECT ID_unit, Name FROM dbo.Unit_of_measure", con);
...
            dataGridView1.Columns.Insert(3, cbx_unit);
Добавлено через 9 минут
Для привязки добавляешь вот это ПЕРЕД созданием колонки DataGridViewComboBox:
C#
1
2
3
4
5
6
            textBox1.DataBindings.Add("Text", ds, "Drug.ID_drug");
 
            comboBox1.DataSource = ds.Tables["Unit_of_measure"];
            comboBox1.DisplayMember = "Name";
            comboBox1.ValueMember = "ID_unit";
            comboBox1.DataBindings.Add(new Binding("SelectedValue", ds, "Drug.ID_unit"));
1
 Аватар для FedorF
56 / 1 / 1
Регистрация: 11.06.2012
Сообщений: 51
05.05.2014, 07:16  [ТС]
nmcf, Спасибо, нашла ошибку (у меня в таблице Unit_of_measure было две строки с одинаковым значением поля Name, а оно д.б. уникальным, поэтому ничего не выводилось), а вот привязка не работает, текстбоксы и комбобокс заполняются значениями первой записи DataGridView и не меняются при перемещении

Спасибо вам, что помогаете!

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 textBox1.DataBindings.Add("Text", ds, "Drug.ID_drug");
            textBox2.DataBindings.Add("Text", ds, "Drug.Name");
 
            comboBox1.DataSource = ds.Tables["Unit_of_measure"];
            comboBox1.DisplayMember = "Name";
            comboBox1.ValueMember = "ID_unit";
            comboBox1.DataBindings.Add(new Binding("SelectedValue", ds, "Drug.ID_unit"));
                      
 
            var cbx_unit = new DataGridViewComboBoxColumn(); //добавляем новою колонку
 
            cbx_unit.Name = "Единица измерения";
            cbx_unit.DataSource = ds.Tables["Unit_of_measure"];
            cbx_unit.DisplayMember = "Name";
            cbx_unit.ValueMember = "ID_unit";
            cbx_unit.DataPropertyName = "ID_unit";
            cbx_unit.MaxDropDownItems = 20;
            cbx_unit.FlatStyle = FlatStyle.Flat;
            dataGridView1.Columns.Insert(3, cbx_unit);
            dataGridView1.Columns[3].Width = 100;
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
05.05.2014, 08:48
Лучший ответ Сообщение было отмечено FedorF как решение

Решение

Надо ещё BindingContext'ом управлять. Смотри последнюю функцию. Я привязал к событию CellMouseClick.
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
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;
using System.Data.SqlClient;
using System.Data.SqlTypes;
 
namespace NewProgram
{
    public partial class Form1 : Form
    {
 
        DataSet ds;
 
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            ds = new DataSet();
 
            SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=C:\Users\user0\Desktop\NewProgram\DB1.mdf;Integrated Security=True;Connect Timeout=30");
            //SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\user0\Desktop\NewProgram\DB1.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
 
            SqlDataAdapter drug_adapter;
            SqlCommand drug_cmd = new SqlCommand("SELECT ID_drug, Name, ID_unit FROM dbo.Drug", con);
            drug_adapter = new SqlDataAdapter(drug_cmd);
 
            SqlCommandBuilder drugbuilder;
            drugbuilder = new SqlCommandBuilder(drug_adapter);
 
            SqlDataAdapter unit_adapter;
            SqlCommand unit_cmd = new SqlCommand("SELECT ID_unit, Name FROM dbo.Unit_of_measure", con);
            unit_adapter = new SqlDataAdapter(unit_cmd);
 
            SqlCommandBuilder unitbuilder;
            unitbuilder = new SqlCommandBuilder(unit_adapter);
 
            con.Open();
 
            drug_adapter.Fill(ds, "Drug"); //прочитать Drug
            unit_adapter.Fill(ds, "Unit_of_measure");  // прочитать Unit_of_measure
            con.Close();
 
 
            //ds.Tables["Unit_of_measure"].Columns["Name"].Unique = true;
 
            ds.Relations.Add(new DataRelation("data_rel", ds.Tables["Unit_of_measure"].Columns["ID_unit"], ds.Tables["Drug"].Columns["ID_unit"]));
 
            dataGridView1.DataSource = ds.Tables["Drug"]; // Drug в Датагридвью
            dataGridView1.Columns["ID_unit"].Visible = false; // скрываем колонку с идентификатором
 
            textBox1.DataBindings.Add("Text", ds, "Drug.ID_drug");
 
            comboBox1.DataSource = ds.Tables["Unit_of_measure"];
            comboBox1.DisplayMember = "Name";
            comboBox1.ValueMember = "ID_unit";
            comboBox1.DataBindings.Add(new Binding("SelectedValue", ds, "Drug.ID_unit"));
 
            var cbx_unit = new DataGridViewComboBoxColumn(); //добавляем новою колонку
 
            cbx_unit.Name = "Единица измерения";
            cbx_unit.DataSource = ds.Tables["Unit_of_measure"];
            cbx_unit.DisplayMember = "Name";
            cbx_unit.ValueMember = "ID_unit";
            cbx_unit.DataPropertyName = "ID_unit";
            cbx_unit.MaxDropDownItems = 20;
            cbx_unit.FlatStyle = FlatStyle.Flat;
            dataGridView1.Columns.Insert(3, cbx_unit);
            dataGridView1.Columns[4].Width = 200;
 
 
 
 
        }
 
        private void dataGridView1_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            this.BindingContext[ds, "Drug"].Position = dataGridView1.CurrentRow.Index;
        }
    }
}
Добавлено через 3 минуты
Кроме того DataSet надо объявить в классе. Соединение и адаптеры - тоже. Здесь достаточно только DataSet, но при расширении программы может понадобиться остальное.
1
 Аватар для FedorF
56 / 1 / 1
Регистрация: 11.06.2012
Сообщений: 51
05.05.2014, 09:21  [ТС]
nmcf, спасибо вам огромное, всё получилось
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.05.2014, 09:21

Не могу отредактировать выделенную строку в DataGridView
У меня есть приложение, в ней DataGridView выводит данные, из отдельного окна с combox-ами, приложения связано с базой MS SQL. Мне надо...

Вставить из буфера текст в выделенную ячейку datagridView
Народ, подскажите как вставить из буфера текст в выделенную ячейку datagridView, работа в C#. Не задавайте свои вопросы в чужих темах

Как сделать выделенную строку в DataGridView текущей
Есть грид, мышкой выбираем например, 7-ю строчку и например по нажатию Button выполняется команда DataGridView.Rows.Selected=...

Как преобразовать выделенную строку в dataGridView в объект
Допустим в качестве DataSource у dataGridView был установлен список List<MyClass> list; List<MyClass> list = new...

Выделенную строку DataGridView переместить вниз на одну позицию
Привет всем. Помогите пожалуйста с вопросом. Есть программка на vb.NET. На форме есть DataGridView и Button. Можно ли сделать так, чтобы...


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

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

Новые блоги и статьи
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru