【问题标题】:datagridview - visible/read only property cannot be set on a specific data columndatagridview - 不能在特定数据列上设置可见/只读属性
【发布时间】:2013-01-30 22:18:55
【问题描述】:

我在应用程序中有一个 datagridview。 datagridview 有一个数据表作为它的数据源。

填充datagridview后,我有一个设置列属性(宽度、可见、只读)的过程。

此过程适用于我的开发环境。但是,在我的生产环境中,我收到以下消息:

操作无效,因为它会导致对 SetCurrentCellAddressCore 函数的可重入调用。

我在 Visible = False 处将问题缩小到此代码:

        For i As Integer = 0 To D.Columns.Count - 1
            D.Columns(i).Width = 50
            D.Columns(i).DefaultCellStyle.Alignment=DataGridViewContentAlignment.MiddleLeft
            D.Columns(i).Visible = False
        Next

该错误仅发生在第 1 列。但是,如果我将第 1 列排除为不可见,则当我将第 1 列设置为只读时,应用程序将失败。

我了解重入调用错误是由于正在使用 datagridview 单元格造成的无限循环。但是,该代码在 dev 中有效。我在生产测试中使用了开发数据库的副本,所以问题不应该与数据相关。

当列不可见或只读时,什么会导致重入调用?

【问题讨论】:

  • 您正在遍历每一列并设置每一列的属性。因此,如果您将其设置为 false,那么您将把它们全部隐藏起来......
  • 我把它们全部隐藏起来,然后让它们中的三个可见。问题是它在设置第二列不可见时失败,然后才到达其他八列。
  • 你在哪里让它们可见,我没看到...?
  • 三个在我上面显示的代码中可见。我现在正在重新设计 datagridview 后端,因为我认为我的一些问题是由那里的问题引起的。

标签: vb.net datagridview datasource readonly visible


【解决方案1】:

我要做的是,不是循环遍历 datagridview 中的每一列,而是遍历源数据表中的列,并使用列名而不是索引使源列的 datagridview 列不可见。索引可以随机播放(在修改属性时),名称保持不变,除非您更改它们。

我以前也遇到过类似的路障。

【讨论】:

  • 我更改为循环遍历列名的源数据表,但它在同一列上失败。它不会在开发中失败,而是在生产机器上失败。 D.Columns(col.ColumnName).Visible = False
  • 我想我有一个解决方法,在加载表单上的所有内容后,我单击一个按钮来运行 datagridview 格式。我不确定为什么会这样,但它确实将加载操作与格式化操作分开。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-30
相关资源
最近更新 更多