我有一个用C#编写的WinForms应用程序,其中我有一个DataGridView绑定到从SQL数据库填充的DataSource。
我的代码如下 -
string sqlText = "SELECT columns FROM table;";
SqlCommand sqlCom = new SqlCommand(sqlText);
DataTable table = new DataTable();
SqlConnection linkToDB = DatabaseConnection();
sqlCom.Connection = linkToDB;
linkToDB.Open();
using (linkToDB)
using (SqlDataAdapter adapter = new SqlDataAdapter(sqlCom))
{
adapter.Fill(table);
}
dataMyGridView.DataSource = table;
我尝试将DataGridViewComboBox添加到此处,如下所示 -
DataGridViewComboBoxColumn colBox = new DataGridViewComboBoxColumn();
colBox.DataSource = GetListOfValues();
dataMyGridView.Columns.Add(colbox);
现在这样可行,但是它使用ComboBox添加了一个全新的列,而不是将其中一个现有列转换为ComboBox。
任何人都可以解释我如何将dataMyGridView中的现有列转换为ComboBox吗?
GetListOfValues函数只返回一个DataTable,其中包含ComboBox字段的所有可能值。它填充正确,但就像我说的,它是一个全新的专栏。如何将添加的ComboBox引用到'table'中的相关属性。
答案 0 :(得分:2)
我今天回答了类似的question
创建列后,您无法更改其类型。您可以通过两种方式实现目标。
1.创建所需的列,将其添加到网格并绑定数据。如果设置列的DataPropertyName
属性,那么当数据绑定时,数据列将绑定到网格列。 DataGridView将自动生成其他列。将第二个数据源绑定到组合框本身。
2.修改您的数据库,使列表由数据库提供,绑定将自动创建组合柱。
答案 1 :(得分:1)
是的,一旦填充了DataGridView,就无法更改列类型。 但是,您可以通过执行以下步骤来实现目标。 1。
dataView.Columns["yourColoumn"].Visible = false;
DataGridViewComboBoxColumn cmbCol = new DataGridViewComboBoxColumn();
cmbCol.HeaderText = "yourColumn";
cmbCol.Name = "myComboColumn";
cmbCol.Items.Add("True");
cmbCol.DataSource = myList();
dataView.Columns.Add(cmbCol);
dataView.Columns["myComboColumn"].DisplayIndex = "at any index that you want";
foreach (DataGridViewRow row in dataView.Rows)
{
row.Cells["myComboColumn"].Value = row.Cells["yourColumn"].Value;
}
。 2.现在你只需做一件事,再举办一次。
private void dataView_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
try
{
dataView.Rows[e.RowIndex].Cells["yourColoumn"].Value = dataView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value;
}
catch (Exception ex)
{
}
}
其实你我只是创建了一份" yourColoumn"在组合框中。在后端" yourColoumn"正在更新。
答案 2 :(得分:-1)
您好我有这样的帖子请查看..它与示例代码完美无缺。