【问题标题】:Adding multiple, different controls to DataGridView [closed]向 DataGridView 添加多个不同的控件 [关闭]
【发布时间】:2016-05-24 07:25:16
【问题描述】:

我想创建一个对象来表示 DataGridView 中的一个单元格,包含一个标签、组合框和一个文本框,并用不同的值填充我的表格中的单元格。

我了解如何制作自定义单元格,但我看到的每篇文章或教程都只涉及每个单元格的一种控件类型,这对我来说也很困惑。

我读到了这个 - DataGridView Control (Windows Forms)

但就是想不通..

那么有什么方法可以制作这种对象吗?

【问题讨论】:

  • 您想在一个单元格中包含所有这些控件吗?它们是否显示/编辑相同的值?
  • 例如,标签应显示姓名,组合框应显示可供选择的姓名列表,文本框将包含电话号码。每当用户从组合框中选择一个名称时,标签和文本框都会根据他选择的名称(当然来自数据库)而改变。是的,都在一个单元格中
  • 目前还不清楚您的具体要求是什么。但是如果您需要在DataGridView 中显示LabelTextBoxComboBox,则不需要创建自定义列类型。您可以使用只读的DataGridViewTextBoxColumn 作为标签,使用DataGridViewTextBoxColumn 作为文本框,使用DataGridViewComboBoxColumn 作为组合框。
  • 看看这个问题及其答案:Displaying a collection of controls in Windows Forms
  • 好吧,我需要一种方法将所有这些都放入一个单元格中......

标签: c# winforms datagridview custom-controls custom-object


【解决方案1】:

您可以尝试使用所需控件进行用户控制并将其放置在 DGV 单元中

【讨论】:

  • 哈哈简单而精彩。不敢相信我没想到谢谢!
  • ^^ 没问题 - 有很多关于如何在堆栈上执行此操作的示例,祝你好运!
【解决方案2】:

如果我理解正确,您希望您的单元格显示姓名和电话。由于每个单元格都可以有一个值,因此您必须将 Name 和 Phone 包装到单个对象(例如 Contact)中,并且绑定的数据源属性应该是该类型。

您实际上并不需要所有三个控件都显示在单元格中。当不处于编辑模式时,您需要两个标签(一个用于名称,一个用于电话)。在编辑模式下,您需要一个组合框和一个标签(如果您希望手机可编辑,则需要一个文本框 - 但这可能很棘手)。

然后你要创建一个自定义的DataGridViewCell、自定义的DataGridViewColumn和一个自定义的编辑控件。

虽然您可以添加两个标签作为自定义 DataGridViewCell 的子标签,但最好简单地覆盖 Paint 并直接在单元格表面上绘制 Name 和 Phone。

自定义编辑控件可以是任何实现了 IDataGridViewEditingControl 接口的控件。因此,它可以是包含组合框和标签(或文本框)的复合控件。复合控件应将 Contact 对象作为一个单元进行编辑。

另外,自定义的 DataGridViewColumn 负责为编辑控件的下拉部分提供数据源。

https://msdn.microsoft.com/en-us/library/7fb61s43(v=vs.110).aspx 描述了如何创建自定义单元格和列。

https://msdn.microsoft.com/en-us/library/7tas5c80(v=vs.110).aspx 描述了如何创建自定义编辑控件以及如何从自定义单元格中实例化它。

【讨论】:

  • 谢谢你的回答,很有帮助!
猜你喜欢
  • 1970-01-01
  • 2020-04-13
  • 1970-01-01
  • 2017-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多