Datagridview 返回空值

Datagridview returning null value

我有一个名为“lookuptable”的表单,其中有一个数据网格视图“dgv1”。我使用面板“panel3”在我的主窗体“仪表板”中插入了“lookuptable”。

代码如下:

 Private Sub btnPOS_Click(sender As Object, e As EventArgs) Handles btnPOS.Click
    TabControl1.SelectedTab = POS
    Dim f As New LookUpTable With {.TopLevel = False, .AutoSize = False}
    f.Dock = DockStyle.Fill
    Me.Panel3.Controls.Add(f)
    f.Show()
End Sub

我正在尝试获取单元格编号 5 的值,但出现此错误 System.NullReferenceException:'Object reference not set to an instance of an object.'

这是我用来获取值的代码:

 Private Sub CustomPrice_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    PriceTxtBox.Text = LookUpTable.dgv1.CurrentRow.Cells(5).Value
    'KeyPreview = True
End Sub

Dgv1 单元格 5 有数据。那么为什么它返回 null?

正如我评论的那样,您当前遇到的问题是因为当代码在第一个代码片段中创建 LookUpTable f 表单时...

Dim f As New LookUpTable With {.TopLevel = False, .AutoSize = False}

然后 f 是该方法的本地。因此,当代码到达第二个代码片段时......它不会知道形式 f...... 换句话说,如果我们尝试访问第二个代码片段中的形式 f这条线…

PriceTxtBox.Text = f.dgv1.CurrentRow.Cells(5).Value.ToString()

编译器会抱怨它不知道f是什么……

因此,一种可能的解决方案(不一定是最佳解决方案)是使 f 成为全局变量,例如...

Dim f As LookUpTable

然后像下面这样更改其他代码片段。

Private Sub btnPOS_Click(sender As Object, e As EventArgs) Handles btnPOS.Click
  TabControl1.SelectedTab = POS
  f = New LookUpTable With {.TopLevel = False, .AutoSize = False}
  f.Dock = DockStyle.Fill
  Me.Panel3.Controls.Add(f)
  f.Show()
End Sub

不清楚调用以下代码的位置,因为它似乎是一个 Load 事件。但是,如果它的形式与上面的代码相同,那么这应该可以工作……

Private Sub CustomPrice_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  PriceTxtBox.Text = f.dgv1.CurrentRow.Cells(5).Value
  'KeyPreview = True
End Sub

我希望这是有道理的。