我是vb.net的新手,正在VS 2012上工作。我有一个datagridview,它显示ms-access 2007数据库表的行。我创建了一个表单(与文本框和添加/更新/取消按钮-所有动态(使用代码)),它显示的数据,当一行的数据视图被选中。
现在,我希望(选定行的)字段的值显示在文本框中,并根据单击的按钮在数据库中添加/更新对文本框所做的任何更改。怎样才能做到呢?也就是说,如何:
-
用行值填充文本框,
-
更新/添加更改到数据库?
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后,需要从表单和集合中删除所有控件,并准备重新加载一组新的控件。
但是我不得不说,你需要一点经验来开发这样一个真正实用的系统。