离开表单后,datagridview 行数为零

问题描述 投票:0回答:1

就上下文而言,我有一个应用程序可以为我们的棒球幻想联盟进行选秀。它记录了人们做出的选择。我想添加一个带有空白网格的表格,在制作和输出到我的电视时填充选择。在我的主窗体中,我有这个简单的代码:

Private Sub SetUpPickBoard()

    Dim frmPickBoard As New frmResults
    frmPickBoard.Show()

End Sub

然后,在我的 frmResults 表单加载中,我手动构建一个 datagridview,如下所示:

Private Sub frmResults_Load(sender As Object, e As EventArgs) Handles Me.Load

    Dim rsPlayers As DataTable
    Dim strSQL = "SELECT ID,DrafterName FROM tblDrafters ORDER BY DraftOrder"
    rsPlayers = frmMain.DataAccess.GetDataTable(strSQL)
    intDrafterCount = rsPlayers.Rows.Count
    For intDrafters = 0 To intDrafterCount - 1
        dgvPickBoard.Columns.Add("Drafter" & intDrafters.ToString, rsPlayers.Rows(intDrafters).Item("DrafterName"))
    Next
    For intCtr = 0 To 22
        Dim dgrNewRow As New DataGridViewRow
        dgrNewRow.HeaderCell.Value = (intCtr + 1).ToString
        dgvPickBoard.Rows.Add(dgrNewRow)
    Next
    Me.WindowState = FormWindowState.Maximized
    MsgBox(dgvPickBoard.Rows.Count & "-" & dgvPickBoard.Columns.Count)
End Sub

最后的消息框显示(正确)23-10

然后返回主窗体。然后,在进行选择的代码中,我只是尝试使用所选名称更改该表单中的一个单元格的文本。

rsResults.datagridview1.rows(rownumber).cells(columnnumber).value=strPickedName

我收到索引超出范围错误。现在行数为 0,列数也是如此。即使我在 frmResults 表单中调用函数并传入行、列和文本值,datagridview 仍然有零行/列。如果可能的话,我不想每次做出选择时都必须从数据库重建整个网格。

那么为什么我的 datagridview 是“空”的?它仍然显示在表单中。当它离开加载函数时,我是否丢失了对行的引用?

vb.net winforms datagridview
1个回答
0
投票

我在尝试操作另一种表单时遇到了问题,最后我偶然发现了这个问题。答案很详细这里。基本上,通过表单名称引用表单实际上会为您提供实际表单的“副本”。我将表单的引用从 frmResults 更改为我在实例化 frmPickBoard 表单时创建的对象(当然,我必须将定义移至全局级别)。然后我就能够访问和操作我创建的表单中的所有控件。

© www.soinside.com 2019 - 2024. All rights reserved.