Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
 Аватар для FedorF
56 / 1 / 1
Регистрация: 11.06.2012
Сообщений: 51

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

04.05.2014, 09:34. Показов 1961. Ответов 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
Ответ Создать тему
Новые блоги и статьи
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет) Содержание проекта Симуляция вековой (50 лет) экологической сукцессии в почве леса Основные участники: АМ-гриб, ЭКМ-гриб,. . .
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru