我正在尝试向同一列中的单元格添加不同的控件。下拉列表没有显示,也没有可见的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;
}
答案 0 :(得分:3)
不确定这对您是否有帮助,但也许是另一种方法?
我希望能够更新我读入DataGridView的Excel电子表格,并为用户提供一些选项。我使用了一个可以在MouseClick事件上显示的ContextMenuStrip。
右键单击单元格时会显示一个小菜单:
如果它不是你要找的东西,抱歉;也许是另一种解决方案:
////////////////////////////////////////////////////////////////////////
//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是否大于行数。