sql - 我希望根据组合框选择转到下一行 SQL 数据
问题描述
基本上,如果组合框选择(字段)是“工程”,则只会显示与该选择对应的行。我用下面的代码实现了这一点。我想访问与此(字段)选择相似且仅对应于此(字段)选择的下一行数据,并适当地填充文本框控件。显示该行中该组合框选择下保存的所有数据。这工作正常。Button1_Click 下面的代码模块是我访问下一行的尝试;但是,显示不正确的数据。无论如何修复和显示所需的数据是 - 组合框选择符合数据库中标准的下一整行 SQL 数据?
Private Sub BtnSearch_Click(sender As Object, e As EventArgs) Handles BtnSearch.Click
Dim Command As New SqlCommand("Select * From Table_Upload where Field = @Field", Connection)
Dim DA As New SqlDataAdapter(Command)
Dim DT As New DataTable()
Dim DR As SqlDataReader
Command.Parameters.Add("@Field", SqlDbType.VarChar).Value = CmbField.SelectedItem
DA.Fill(DT)
CmbField.DataSource = DT
CmbField.DisplayMember = "Field"
Connection.Open()
DR = Command.ExecuteReader()
If DR.Read() Then
TxtTitle.Text = DR(0)
TxtComp.Text = DR(1)
TxtDate.Text = DR(2)
TxtSalary.Text = DR(3)
CmbEmp.SelectedItem = DR(4)
TxtDesc.Text = DR(5)
TxtExp.Text = DR(6)
TxtPhone.Text = DR(7)
TxtEmail.Text = DR(8)
TxtAddr.Text = DR(9)
End If
Connection.Close()
End Sub
下一步代码:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles BtnNext.Click
Dim Command As New SqlCommand("Select * From Table_Upload where Field = @Field", Connection)
Dim DA As New SqlDataAdapter(Command)
Dim DS As New DataSet()
Dim DR As SqlDataReader
Command.Parameters.Add("@Field", SqlDbType.VarChar).Value = CmbField.SelectedItem
DA.Fill(DS, "Table_Upload")
CmbField.DisplayMember = "Field"
Connection.Open()
DR = Command.ExecuteReader()
If DR.Read() Then
TxtTitle.Text = DR(+1).ToString()
TxtComp.Text = DR(+1).ToString()
TxtDate.Text = DR(+1).ToString()
TxtSalary.Text = DR(+1).ToString()
CmbEmp.SelectedItem = DR(+1).ToString()
TxtDesc.Text = DR(+1).ToString()
TxtExp.Text = DR(+1).ToString()
TxtPhone.Text = DR(+1).ToString()
TxtEmail.Text = DR(+1).ToString()
TxtAddr.Text = DR(+1).ToString()
End If
Connection.Close()
End Sub
解决方案
一旦你有了你的数据阅读器,创建一个DataTable
并调用它的Load
方法来加载所有的数据。DataTable
然后,您可以将a绑定BindingSource
到BindingSource
您的TextBoxes
. 然后,您可以调用MoveNext
以推进数据。
myDataTable.Load(myDataReader)
myBindingSource.DataSource = myDataTable
myTextBox.DataBindings.Add("Text", myBindingSource, "MyColumn")
编辑:
在根据下面 Joel Coehoorn 的评论进行了一些阅读和测试之后,我了解到,虽然您不能将数据读取器直接绑定到 Windows 窗体中的控件,但您可以将一个绑定到 aBindingSource
并且它会生成一个IBindingList(Of DataRecordInternal)
,它是 an IList
,因此满足WinForms 绑定的要求。ADataRecordInternal
可以按列名或序号以与 aDataRow
或DataRowView
can 相同的方式进行索引,因此出于绑定目的可以以几乎相同的方式处理它们,例如
Using connection As New SqlConnection("connection string here"),
command As New SqlCommand("SELECT * FROM MyTable", connection)
connection.Open()
Using reader = command.ExecuteReader()
BindingSource1.DataSource = reader
ComboBox1.DisplayMember = "Name"
ComboBox1.ValueMember = "Id"
ComboBox1.DataSource = BindingSource1
TextBox1.DataBindings.Add("Text", BindingSource1, "Description")
End Using
End Using
无论哪种方式
推荐阅读
- css - 无法在反应中导入字体(node-sass)
- python - 我想在Python中将字符串列表(温度值:['23.14C','19.91C'] ['54.04F','32.64F'])转换为浮点数
- sql - SQL 问题:链接表时 WHERE/INNER JOIN 子句的顺序重要吗?
- react-native - 如何防止在android中打开键盘时反应本机模式向上移动?
- angular - 需要 Angular 7 中的动态复选框列表控件
- magento - 一旦我在选择上进行选择,每个必填字段都会出现“必填字段”错误
- git - 如何最小化克隆存储库以能够列出分支并签出单个文件
- firebase - 为什么我的快照显示它包含数据?
- javascript - 在倒数计时器中添加时区
- docker - 无法从 ubuntu 18.04 主机将卷挂载到 docker-machine