我有一列DataGridViewComboBoxColumn但是每个cell的下拉列表内容不同,于是循环for(inti=0,i<max,i++){dgv.Rows.Add(newDataGridViewRow());DataGridViewComboBoxCellcell=dgv.Rows[i... 我有一列DataGridViewComboBoxColumn但是每个cell的下拉列表内容不同,于是循环
for(int i = 0, i < max, i++)
{
dgv.Rows.Add(new DataGridViewRow());

DataGridViewComboBoxCell cell = dgv.Rows[i].Cells[1] as DataGridViewComboBoxCell; //第二列

//comboCol.Items.AddRange(list[i].toArray()); //comboCol 第二列名

cell.Items.AddRange(list[i].toArray());
}
然后给DataGridView绑定数据源
dgv.DataSource = new BindingList<object>(objList);
dgv.Columns[0].DataPropertyName = "col1";
dgv.Columns[1].DataPropertyName = "col2";
在绑定这三行代码的前后分别检查第二列某行cell的Items.Count发现绑定前有长度,但是绑定后长度为0,也就是给这些cell添加的下拉项都清空了!绑定后再次添加项也没用,还是会清空。另外在循环里如果用注释掉的那行代码,也就是给整列添加项,那就没有问题,但是就不能满足我每个cell下拉内容不同这个需求。
实在没有头绪,不知道怎么回事,求助!

下面的方法实测可行。

        private void SetCellComboBoxItems(int rowIndex, int colIndex, string[] itemsToAdd)
        {
            DataGridViewComboBoxCell dgvcbc = (DataGridViewComboBoxCell)dataGridView1.Rows[rowIndex].Cells[colIndex];
            dgvcbc.Items.Clear();
            foreach (string itemToAdd in itemsToAdd)
            {
                dgvcbc.Items.Add(itemToAdd);
            }
        }
        private void button2_Click(object sender, EventArgs e)
        {
            //下面只是测试数据,每行项目增加1,
            //我的第一列是DataGridViewComboBoxCell
            string[] os;
            for (int i = 0; i < dataGridView1.RowCount; i++)
            {
                os = new string[i + 1];
                for (int j = 0; j <= i; j++)
                    os[j] = j.ToString();

                SetCellComboBoxItems(i, 0, os);
            }
        }