DatagridViewRow.Cells.Add方法无效

时间:2016-03-27 10:30:31

标签: c# winforms c#-4.0 datagridview datagrid

我有一个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);

    }
}

我如何做到这一点?

1 个答案:

答案 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另一个细胞。