【问题标题】:View a row of datagridview in a dynamically created form在动态创建的表单中查看一行datagridview
【发布时间】:2015-09-30 10:46:05
【问题描述】:

我是 vb.net 的新手,正在开发 VS 2012。 我有一个显示 ms-access 2007 数据库表的行的 datagridview。我创建了一个表单(带有文本框和添加/更新/取消按钮 - 都是动态的(使用代码)),它在选择数据网格视图的一行时显示数据。

现在,我希望(所选行的)字段的值显示在文本框中,并对要在数据库中添加/更新的文本框所做的任何更改,具体取决于单击的按钮。如何做呢?也就是说,如何:

  1. 用行值填充文本框,并且,

  2. 更新/添加对数据库的更改?

基本上,真正的问题是在表单上引用动态创建的控件!我收到null reference exception

请帮忙! 非常感谢!

【问题讨论】:

  • 除其他外,如果您在运行时创建控件,您必须找到一种方法来维护对它们的引用或在 Controls 集合中找到它们

标签: vb.net winforms nullreferenceexception dynamically-generated


【解决方案1】:

要引用动态创建的控件,只需将这些控件存储在表单变量中即可。

用行值填写文本框

 dim v as object = MyDataGridView.CurrentRow("MyColumName").Value
 MyTextBox.Text  = ""
 if NOT IsDBNull(v) Then MyTextBox.Text  = v.ToString()
 End If

更新/添加对数据库的更改

当您验证版本表单时,更新 dataTable,并假设您已经使用 DataAdapter 加载了 dataTable,调用 DataAdapter 更新函数:

 myDataAdapter.Update(myDataSet, "myDataTableName") 

【讨论】:

  • 我现在正在使用“添加”按钮附加到表格中,但无法引用任何文本框或其中的值。错误是控制“未声明”。此外,如果我 DirectCast 控件,我会得到 NullReferenceException。请建议。
  • 我想做这样的事情: Friend Sub AddNewClient(ByVal sender As System.Object, ByVal e As System.EventArgs) MessageBox.Show("Button AddClient clicked!" & txtClientId.text) End子
  • VS报告txtClientId没有声明。
【解决方案2】:

首先,让我们处理NullReferenceException - 您需要维护控件的引用。例如,您可以像这样动态创建表单,Dim f as New Form()。在这种情况下,您可以为其添加控件等,但您不能对声明进行内部控制。所以,你添加控件,f.Controls.Add...

我认为,您所做的是创建了一个动态添加控件的表单。在这种情况下,您可以这样做

Dim ctrlList As New Dictionary(Of String, Control)()
Dim txtBox1 As New TextBox()
txtBox1.Location = New Point(0, 0) 
' set txt box here . . . 
Me.Controls.Add(txtBox1)
ctrlList.Add("txtBox1", txtBox1) ' reference this to get to controls dynamically

如何填充控件。主要有2种方法。一个 - 以编程方式,另一个使用绑定。

既然您是动态地做事,那么您可以这样做 - 完全动态地构建屏幕。为此,例如,如果您的选择语句为Select col1, col2, col3 from table,您将为每一列创建一个文本框并将其放置在所需位置。现在您可以从网格中的选定行中获取DataRow,并将文本框的文本设置为

ctrlList("col1").Text = dr("col1")

其中“col1”将同时是 - 您的控件和列的键名。您也可以这样命名控件。

第二种方法是使用绑定。您可以绑定网格和文本框。这样你就可以预先连接你的控件,然后你就不需要设置text 属性。

使用此系统,您可以完全动态地加载任何数据。因此,如果您的 select 将有 10 列,那么您将有 10 个控件,等等。完成屏幕后,您需要从表单和集合中删除所有这些,并准备重新加载新的控件集。

但我不得不说,你需要一点经验来开发这样的真正功能系统。

【讨论】:

    猜你喜欢
    • 2012-08-28
    • 2020-01-21
    • 2012-09-08
    • 2014-01-17
    • 1970-01-01
    • 2012-03-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-03
    相关资源
    最近更新 更多