我有以下两个表格:
| 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];
}
我尝试将DataGridView的Part_Type字段单元格转换为ComboBoxCells并手动添加缺少的部分类型,但我收到了invalidcastexception。
有没有办法做到这一点,最好比我试过的更容易?
答案 0 :(得分:0)
要使用下拉单元格类型,您需要做两件事:
DataGridViewComboBoxCell
创建下拉单元格
您必须创建所有Columns
作为您希望它们在代码中的类型,而不是使用自动列生成。设置myDataGridView.AutoGenerateColumns = false;
这需要在 发出查询之前完成,因为您以后无法更改列类型。
但是有一个解决方法:为了以后更改类型,您需要交换每个 Cell
您希望特殊的类型,针对该类型的单元格你要。注意:这是关于单元格而不是列,所以你需要遍历所有行,就像我在下面的代码中所做的那样!
使用适当的数据填写:
您可以a)使用DataBinding:
Datasource
,通常为第二个表中的查询;但您也可以将它们设置为与第一个查询结果或其他来源不同的选择.. DisplayMember
& ValueMember
(在您的情况下是同一个字段。)或者你b)可以用未绑定数据填充Items
集合。
您可以使用以下内容:
string myCmdText = "SELECT * FROM Parts";
string myCmdText2 = "SELECT * FROM Types";
int yourDropdownIndex = 2;
MySqlCommand myQuery = new MySqlCommand(myCmdText, myConnection);
MySqlCommand myQuery2 = new MySqlCommand(myCmdText2, myConnection);
using (MySqlDataAdapter myAdapter = new MySqlDataAdapter(myQuery))
using (MySqlDataAdapter myAdapter2 = new MySqlDataAdapter(myQuery2))
{
DataSet DS = new DataSet();
DataTable DT2 = new DataTable();
myAdapter.Fill(DS);
myAdapter2.Fill(DT2);
DS.Tables.Add(DT2);
myDataGridView.DataSource = DS.Tables[0];
foreach (DataGridViewRow row in myDataGridView.Rows)
{
var temp = row.Cells[yourDropdownIndex].Value;
DataGridViewComboBoxCell comboCell = new DataGridViewComboBoxCell();
comboCell.DisplayMember = "type";
comboCell.ValueMember = "type";
comboCell.DataSource = DS.Tables[1];
row.Cells[yourDropdownIndex] = comboCell;
row.Cells[yourDropdownIndex].Value = temp;
}
}
如有必要,您现在可以将Cell
转换为DataGridViewComboBoxCell
:
int ddlCount = ((DataGridViewComboBoxCell)
myDataGridView.Rows[row].Cells[yourDropdownIndex]).Items.Count;
您可能希望在班级级别声明DataSet DS
。