Нужно вывести соответствующее значение в DataGridView comboBox
У меня есть БД и 2 таблицы
CREATE TABLE Банк (
ID_Банка INT PRIMARY KEY,
Название_банка VARCHAR(255) UNIQUE NOT NULL,
Код_банка VARCHAR(9) UNIQUE NOT NULL,
Адрес_банка VARCHAR(255) NOT NULL
);
CREATE TABLE Счет (
ID_Счета INT PRIMARY KEY,
ID_Банка INT,
Номер_счета VARCHAR(28) UNIQUE NOT NULL,
Вид_счета VARCHAR(50) NOT NULL,
ФИО_владельца_счета VARCHAR(255) NOT NULL,
Состояние_счета VARCHAR(50) NOT NULL,
Дата DATE NOT NULL,
Наличие_кредита BOOLEAN NOT NULL,
Сумма_кредита DECIMAL(10, 2) NOT NULL,
FOREIGN KEY (ID_Банка) REFERENCES Банк (ID_Банка)
);
Я хочу вывести их в DataGridView, у меня получается вывести все и заполнить ComboBox, но я не могу вывести соответствующее значение, то есть, чтобы сразу в ComboBox было выбрано соответствующее значение (Название банка)
private void PopulateDataGridView3()
{
string query = "SELECT * FROM Счет";
DataTable dataTable = new DataTable();
using (MySqlDataAdapter adapter = new MySqlDataAdapter(query, connector.getConnection()))
{
adapter.Fill(dataTable);
}
DataGridViewComboBoxColumn comboBoxColumn = new DataGridViewComboBoxColumn();
comboBoxColumn.HeaderText = "ID_Банка";
comboBoxColumn.Name = "ID_Банка";
string bankQuery = "SELECT ID_Банка, Название_банка FROM Банк";
DataTable bankDataTable = new DataTable();
using (MySqlDataAdapter bankAdapter = new MySqlDataAdapter(bankQuery, connector.getConnection()))
{
bankAdapter.Fill(bankDataTable);
}
foreach (DataRow row in bankDataTable.Rows)
{
comboBoxColumn.Items.Add(row["ID_Банка"].ToString() + ": " + row["Название_банка"].ToString());
}
// Добавление ComboBox в dataGridView3
dataGridView3.Columns.Add(comboBoxColumn);
dataGridView3.DataSource = dataTable;
foreach (DataGridViewRow row in dataGridView3.Rows)
{
int bankID = Convert.ToInt32(row.Cells["ID_Банка"].Value);
foreach (DataRow bankRow in bankDataTable.Rows)
{
if (bankID == Convert.ToInt32(bankRow["ID_Банка"]))
{
row.Cells["ID_Банка"].Value = bankID + ": " + bankRow["Название_банка"].ToString();
break;
}
}
}
}
Ответы (1 шт):
Автор решения: Alexander Petrov
→ Ссылка
Как я понимаю, вы хотите, чтобы комбобокс был заполнен данными банков.
private void PopulateDataGridView3()
{
var dataSet = new DataSet();
string accountQuery = "SELECT * FROM Счет";
string bankQuery = "SELECT ID_Банка, Название_банка FROM Банк";
using (var adapter = new SqlDataAdapter(accountQuery, _connectionString))
{
adapter.Fill(dataSet, "Счет");
}
using (var bankAdapter = new SqlDataAdapter(bankQuery, _connectionString))
{
bankAdapter.Fill(dataSet, "Банк");
}
var comboBoxColumn = new DataGridViewComboBoxColumn();
comboBoxColumn.HeaderText = "Банк";
comboBoxColumn.Name = "Bank";
comboBoxColumn.DataPropertyName = "ID_Банка";
comboBoxColumn.DisplayMember = "Название_банка";
comboBoxColumn.ValueMember = "ID_Банка";
var accountBindingSource = new BindingSource(dataSet, "Счет");
var bankBindingSource = new BindingSource(dataSet, "Банк");
comboBoxColumn.DataSource = bankBindingSource;
dataGridView3.DataSource = accountBindingSource;
dataGridView3.Columns.Add(comboBoxColumn);
comboBoxColumn.DisplayIndex = 1;
}
Используем только привязку данных (data binding), не нужно вручную работать со строками и ячейками грида.
Обратите внимание на новые заданные свойства комбобокса.
P.S. Я использовал для теста Sql Server, но это меняет лишь используемый DataAdapter.