在自定义DataGridViewCell中托管UserControl

时间:2009-12-31 14:02:59

标签: c# winforms datagridview

我创建了一个自定义DataGridViewCell,以便在用户开始编辑单元格时显示特定的UserControl。基本上,控件包含一个TextBox,其中包含一个易于由代码处理的建议列表 我得到了我的代码来正确调整列表的大小,并让它包含我想要的和我想要的地方。我现在遇到的问题是控件没有在屏幕上正确绘制,而ListBox可能是在行“内”绘制的,因为它比行高很多,所以不会显示在屏幕。

如何在DataGridView上绘制控件?

3 个答案:

答案 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;

}