У меня есть две следующих таблицы:Как заполнять DataGridView из двух таблиц с ComboBox
| Part_id | Name |Part_Type|
|----------|---------|---------|
| 1 | ABC | Nut |
| 2 | DEF | Nut |
| 3 | GHI | Washer |
| Type |
|----------|
| Nut |
| Screw |
| Washer |
Как я могу заполнить DataGridView так:
| Part_id | Name | Part_Type |
|----------|---------|-------------------|
| 1 | ABC | Nut(combobox) |
| 2 | DEF | Nut(combobox) |
| 3 | GHI | Washer(combobox) |
с выпадающим списком с каждым типом на Part_Type, чтобы пользователь мог изменить тип определенной части?
Это то, что у меня есть:
string myCmdText = "SELECT * FROM Parts";
MySqlCommand myQuery = new MySqlCommand(myCmdText, myConnection);
using (MySqlDataAdapter myAdapter = new MySqlDataAdapter(myQuery))
{
DataSet DS = new DataSet();
myAdapter.Fill(DS);
myDataGridView.DataSource = DS.Tables[0];
}
Я пытался отливать Part_Type поля клетки DataGridView в ComboBoxCells и добавление недостающих типов деталей вручную, но я получаю InvalidCastException.
Есть ли способ сделать это, желательно легче, чем тот, который я пробовал?
Не так легко, как изменить типы столбцов, что невозможно, но не так сложно. См. Мои исправления и добавленный комментарий! - – TaW
Спасибо! Это код, который мне пришлось написать, к сожалению, нет более простого способа его решения. Однако вы не должны бросать DataGridViewTextBoxCell в DataGridViewComboBoxCell, потому что это вызовет InvalidCastException, поэтому я удалю последний бит из ответа. –
Вы можете и должны делать актерский состав, если (и только если) эта ячейка фактически является «DataGridViewComboBoxCell», иначе вы не сможете получить доступ к ее специальным свойствам, особенно к коллекции «Items». Поэтому, чтобы быть в безопасности, вы можете проверить перед литой: 'if (cell.EditType == typeof (DataGridViewComboBoxCell))' .. - Или использовать с 'as' и проверить на' null' .. – TaW