我有一个Windows窗体,其中我有这个数据网格,我试图遍历所有数据网格行,在两列之后添加一个组合框。
我的目标是有一个组合框列,根据单元格[0]的值显示项目。
这是我的代码,我无法向datagrid行添加任何单元格。我做错了什么?
private void UserAccessForm_Load(object sender, EventArgs e)
{
dataGridView1.DataSource = LoadData();
AddPermissions();
}
private DataTable LoadData()
{
ConnectionString = ConfigurationManager.ConnectionStrings["UserProfile"].ToString();
DataSet ds = new DataSet();
using (SqlDataAdapter sqlDataAdapter = new SqlDataAdapter())
{
// Create the command and set its properties
sqlDataAdapter.SelectCommand = new SqlCommand();
sqlDataAdapter.SelectCommand.Connection = new SqlConnection(ConnectionString);
sqlDataAdapter.SelectCommand.CommandType = CommandType.Text;
// Assign the SQL to the command object
sqlDataAdapter.SelectCommand.CommandText = string.Format(Script.sqlGetLocalSystem);
sqlDataAdapter.Fill(dt);
}
return dt;
}
public void AddPermissions()
{
DataTable dPermissions = new DataTable();
long systemId = 0;
DataGridViewComboBoxCell comboBoxCell = null;
foreach (DataGridViewRow row in dataGridView1.Rows)
{
ArrayList permissions = new ArrayList();
comboBoxCell = new DataGridViewComboBoxCell();
systemId = Convert.ToInt64(row.Cells[0].Value);
dPermissions = LoadPermissions(systemId);
foreach (DataRow dataRow in dPermissions.Rows)
{
permissions.Add(dataRow["UserLevelCategoryName"].ToString());
}
comboBoxCell.Items.AddRange(permissions.ToArray());
row.Cells.Add(comboBoxCell);
}
}
我如何做到这一点?
答案 0 :(得分:0)
您无法将单元格添加到行的单元格集合中。您应该将DataGridViewComboBoxColumn
添加到Columns
的{{1}}集合,并将列表设置为列的DataSource
。同时将DisplayMember
设置为要在组合中显示的数据源字段,并将ValueMember
设置为数据源字段,以便在从组合中选择项目时将其值用作选定值。
如果您的网格控件也绑定到数据源,并且您要创建此列以显示网格数据源中字段的值,请将列的DataPropertyName
设置为网格数据源字段你想把这个列绑定到它。
DataGridView
然后,如果要根据另一个单元格在每行的组合框中显示不同的项目,则应该处理DataTable permissions = LoadPermissions(); //Load all permissions
var column1 = new DataGridViewComboBoxColumn();
column1.Name = "column1";
column1.DataSource = permissions;
//a column from Permissions table to use its value when the user select from combo box
column1.ValueMember = "Id";
//a column from Permissions table to show its value in combo box
column1.DisplayMember = "Name";
//a column from datasourec table of your grid which you want to bind column to
column1.DataPropertyName = "PermissionId";
//Add column to grid
this.categoryDataGridView.Columns.Add(column1);
事件并获取编辑控件并根据值的值设置控件的EditingControlShowing
另一个细胞。