【问题标题】:.NET Datagridview Created Using Own Class.NET Datagridview 使用自己的类创建
【发布时间】:2013-09-11 14:26:34
【问题描述】:

我编写了一个类来显示一个包含datagridview 的表单。该类连接到数据库,创建datatable 并将其用作datagridview 的源。

然后我使用Controls.Add()datagridview 添加到表单中。

当使用ShowDialog() 显示表单时,列如预期的那样。

但是,如果我尝试在 ShowDialog() 之前编辑 datagridview 列(宽度等),则会出现错误。如果我在调试中计算行数,它们是 0。但是,如果我进入 ShowDialog() 操作(绕过任何试图编辑列的操作),表单会显示所有列。

我想知道我需要在哪里编辑 datagridview 列,然后它们才会出现在用户面前。

对此的任何帮助将不胜感激。

【问题讨论】:

  • 你得到了什么异常?可能有助于查看一些代码。您可能在创建网格之前设置属性?
  • @Ric 是的,我肯定想在创建之前设置一些东西。代码如下: Dim frm As New Form;暗淡 dgv 作为新的 DataGridView; dgv.Width = 200,dgv.Datasource = [数据表]; frm.ShowDialog() 如果我运行 dgv 会出现数据表中的数据。但是,如果我尝试引用一列 (dgv.Column(0).width = 25) before ShowDialog() 我得到一个错误,因为列数是零。我希望能够在 ShowDialog 之前调整列宽等。
  • 谢谢@Ric。我已经在下面回答了我自己的问题。

标签: .net winforms datagridview


【解决方案1】:

但是,如果我尝试在 ShowDialog 之前编辑 datagridview 列(宽度等),则会出现错误。 (...) 知道了。我需要在 Form Load 事件中添加一个 Handler 并在其中进行调整。

我猜您尝试访问尚不存在的列。

您正在使用DataGridView.AutoGenerateColumns 功能,即使您设置了DataSource 属性,DatagridView 在显示网格之前也不会创建列。

这就是为什么在调用ShowDialog() 之前尝试访问列时它不起作用的原因,它在form_Load 事件中或在显示网格之后起作用。

这是一个常见问题:

使用form_Load 可能是一种可能的解决方法(不能保证每次都可以使用),但我建议您改用DataGridView.DataBindingComplete 事件,它专门用于处理这种情况.

【讨论】:

  • 谢谢,@Chris。这听起来是个好建议。我已经更改了代码。
【解决方案2】:

知道了。我需要在表单加载事件中添加一个处理程序并将调整项放在那里。

【讨论】:

    猜你喜欢
    • 2021-07-28
    • 1970-01-01
    • 2020-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-09
    • 1970-01-01
    • 2020-08-11
    相关资源
    最近更新 更多