我创建了一个自定义DataGridViewCell
,以便在用户开始编辑单元格时显示特定的UserControl
。基本上,控件包含一个TextBox
,其中包含一个易于由代码处理的建议列表
我得到了我的代码来正确调整列表的大小,并让它包含我想要的和我想要的地方。我现在遇到的问题是控件没有在屏幕上正确绘制,而ListBox
可能是在行“内”绘制的,因为它比行高很多,所以不会显示在屏幕。
如何在DataGridView上绘制控件?
答案 0 :(得分:2)
您可能需要将ListBox放在单独的弹出窗体中。祝你好运。
或者,您可以将ListBox放在GridView的父窗体中,然后调用BringToTop
以确保它位于网格视图的顶部。
答案 1 :(得分:1)
有一篇msdn文章Build a Custom NumericUpDown Cell and Column for the DataGridView Control,它描绘了datagridviews上的自定义控件。提供的代码示例可能有助于解决您的问题。
答案 2 :(得分:0)
我想你会想看看Faking alternative controls within a DataGridView control in Win Forms 2.0。它将 看起来 ,就像控件托管在DataGridView中一样,但实际上它只是放置在单元格上。我现在使用这个两个DateTimePickers和一个ComboBox非常成功。
来自链接的示例代码:
protected void dgCategory_CellClick(object sender, DataGridViewCellEventArgs e)
{
//set Date Picker to false when initially click on cell
if (dtPicker.Visible)
dtPicker.Visible = false;
if (e.ColumnIndex == 2)
{
//set date picker for category datagrid
dtPicker.Size = dgCategory.CurrentCell.Size;
dtPicker.Top = dgCategory.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, true).Top;
dtPicker.Left = dgCategory.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, true).Left;
if (!(object.Equals(Convert.ToString(dgCategory.CurrentCell.Value), "")))
dtPicker.Value = Convert.ToDateTime(dgCategory.CurrentCell.Value);
dtPicker.Visible = true;
}
}
private void dtPicker_ValueChanged(object sender, EventArgs e)
{
dgCategory.CurrentCell.Value = dtPicker.Value;
dtPicker.Visible = false;
}