在动态创建的表单中查看一行datagridview



我是vb.net的新手,正在VS 2012上工作。我有一个datagridview,它显示ms-access 2007数据库表的行。我创建了一个表单(与文本框和添加/更新/取消按钮-所有动态(使用代码)),它显示的数据,当一行的数据视图被选中。

现在,我希望(选定行的)字段的值显示在文本框中,并根据单击的按钮在数据库中添加/更新对文本框所做的任何更改。怎样才能做到呢?也就是说,如何:

  1. 用行值填充文本框,

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

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

请帮忙!很多谢谢!

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

用行值填充文本框

 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") 

首先,让我们关注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

如何填充控件。主要有两种方法。一种是编程方式,另一种是使用绑定。

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

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

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

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

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

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

最新更新