为datagridview中的特定单元格添加下拉列表

时间:2014-04-28 19:53:33

标签: c# winforms datagridview

我正在尝试向同一列中的单元格添加不同的控件。下拉列表没有显示,也没有可见的setter:

private void AddBooleanDropDown(DataGridView grid, int row, KeyValuePair<string, string> kvp)
{
    DataGridViewComboBoxCell dropDownCell = new DataGridViewComboBoxCell();
    dropDownCell.DataSource = new string[] { "True", "False" };

    grid.Rows[row].Cells["Value"] = dropDownCell;

}

3 个答案:

答案 0 :(得分:3)

不确定这对您是否有帮助,但也许是另一种方法?

我希望能够更新我读入DataGridView的Excel电子表格,并为用户提供一些选项。我使用了一个可以在MouseClick事件上显示的ContextMenuStrip。

右键单击单元格时会显示一个小菜单:

Priority dropdown

如果它不是你要找的东西,抱歉;也许是另一种解决方案:

        ////////////////////////////////////////////////////////////////////////
        //Change Priority Strip
        ////////////////////////////////////////////////////////////////////////
        ContextMenuStrip changePriority = new ContextMenuStrip();
        ToolStripMenuItem highPriority = new ToolStripMenuItem("High Priority");
        changePriority.Items.Add(highPriority);
        highPriority.Click += new EventHandler(changePriorityHighEvent);
        ToolStripMenuItem normalPriority = new ToolStripMenuItem("Normal Priority");
        changePriority.Items.Add(normalPriority);
        normalPriority.Click += new EventHandler(changePriorityNormalEvent);
        ToolStripMenuItem lowPriority = new ToolStripMenuItem("Low Priority");
        changePriority.Items.Add(lowPriority);
        lowPriority.Click += new EventHandler(changePriorityLowEvent);
        ////////////////////////////////////////////////////////////////////////

        private void gridView_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            if (e.Button == MouseButtons.Right)                                //On Right Click
            {
                DataGridView.HitTestInfo hit = gridView.HitTest(e.X, e.Y);     //Get the clicked cell
                if (e.RowIndex < 0)                                            //If it's a header, ignore
                    return;
                gridView.CurrentCell = gridView[e.ColumnIndex, e.RowIndex];    //Select the cell for future info
                if (gridView.CurrentCell.ColumnIndex == 6)                     //If this is the priority column
                {
                    changePriority.Show(Cursor.Position.X, Cursor.Position.Y); //Show the strip
                }
             }
         }

         private void changePriorityHighEvent(Object sender, EventArgs e) {
             //make changes
         }
         private void changePriorityNormalEvent(Object sender, EventArgs e) {
             //make changes
         }
         private void changePriorityLowEvent(Object sender, EventArgs e) {
             //make changes
         }

答案 1 :(得分:1)

这里非常好MSDN Example

  

DataGridView 控件提供了多种列类型,使您的用户可以通过多种方式输入和编辑值。但是,如果这些列类型不满足您的数据输入需求,则可以使用托管您选择的控件的单元格创建自己的列类型。为此,您必须定义派生自 DataGridViewColumn DataGridViewCell 的类。您还必须定义一个派生自Control的类,并实现 IDataGridViewEditingControl 接口。

答案 2 :(得分:1)

不确定您是否可以更改网格中的特定单元格,除非它是相同的类型。 您可以尝试使用该数据源添加新的组合框列

var newCol = new DataGridViewComboBoxColumn()
{
       DataSource = new string[] { "True", "False" }
};

grid.Columns.Add(newCol);

您也可能想要检查传入的int是否大于行数。