Vb.net 显示多条记录
我是新的vb编码只是想帮助显示多个文本框上的多行。上面的代码从另一个表的文本框中提取工资单Id,然后通过下面的表Vb.net 显示多条记录,vb.net,Vb.net,我是新的vb编码只是想帮助显示多个文本框上的多行。上面的代码从另一个表的文本框中提取工资单Id,然后通过下面的表dbo.Smline。我想在不同的文本框中显示同一工资单Id下的多条记录。此代码似乎工作不正常 表单上有三组控件。因此,对于每个单击的Payroll\u id,您最多可以显示三个产品。代码在所有集合中插入相同的值。将代码更改为以下内容: Private Sub Line_Change2() Dim cn As New SqlClient.SqlConnection("xx
dbo.Smline
。我想在不同的文本框中显示同一工资单Id下的多条记录。此代码似乎工作不正常
表单上有三组控件。因此,对于每个单击的
Payroll\u id
,您最多可以显示三个产品。代码在所有集合中插入相同的值。将代码更改为以下内容:
Private Sub Line_Change2()
Dim cn As New SqlClient.SqlConnection("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")
Dim cmd As New SqlClient.SqlCommand
Dim tbl As New DataTable
Dim da As New SqlClient.SqlDataAdapter
Dim reader As SqlClient.SqlDataReader
Try
cn.Open()
Dim sql As String
sql = "select Id,Payroll_Id,ProductCode,Description,Qty from dbo.SmLine where Payroll_Id ='" + Txt1.Text + "'"
cmd = New SqlClient.SqlCommand(sql, cn)
reader = cmd.ExecuteReader
While reader.Read
TextBox1.Text = reader.Item("Id")
Cmb1.Text = reader.Item("ProductCode")
Des1.Text = reader.Item("Description")
Qty1.Text = reader.Item("Qty")
TextBox2.Text = reader.Item("Id")
Cmb2.Text = reader.Item("ProductCode")
Des2.Text = reader.Item("Description")
Qty2.Text = reader.Item("Qty")
TextBox3.Text = reader.Item("Id")
Cmb3.Text = reader.Item("ProductCode")
Des3.Text = reader.Item("Description")
Qty3.Text = reader.Item("Qty")
End While
cn.Close()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
当上面的代码对于
工资单id
有三个以上的产品时,就会退出读取,因为您只有三组控件。但是,如果每个单击的Payroll\u id
可以有三个以上的产品,并且您希望显示所有这些产品,那么您必须动态构建控件 每个Payroll\u Id
最多有三条记录吗?如果您有三种以上的产品用于工资单\u Id
,该怎么办?您只构建了三列控件setGood方法,但避免使用+
运算符进行字符串连接。你甚至可以使用字符串插值“Cmb”+(counter)
$“Cmb{counter}”@djv这是正确的,但是$-字符串插值是C#6.0的一个特性,我不确定他是否使用C#6或更高版本。我肯定他没有使用C#6。无论如何,我总是假设一个问题适用于最新的框架和编译器,除非另有说明。这是2015年VB 14带来的。他也可以选择String.Format(“Cmb{0},counter)
或好的ol'“Cmb”&counter.ToString()
,但是+
连接字符串是一个大禁忌,我不会说这是一个大禁忌。我知道微软建议使用&vs+,以消除歧义,同时声明两者都可以使用。此线程上有一个很好的比较:。尽管如此,我还是将其更改为&。&
始终连接字符串<代码>+根据输入有一些模糊性。当选项Strict On
被添加到代码中时,链接的答案会崩溃,并且您的原始答案也不会用它编译。我想乔尔已经尽力去回答这个问题了,我想知道他在实践中有多少次遵循这个建议+顺便说一句,我对你的回答感到抱歉,我吹毛求疵。(我会在这里删除我的评论,让你的答案简洁明了-祝你有一个好答案!)
Private Sub Line_Change2()
ResetControls()
Dim cn As New SqlClient.SqlConnection("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")
Using cn
cn.Open()
Dim cmd As New SqlClient.SqlCommand
Dim reader As SqlClient.SqlDataReader
Try
Dim sql As String
sql = "select Id,Payroll_Id,ProductCode,Description,Qty from dbo.SmLine where Payroll_Id ='" + Txt1.Text + "'"
cmd = New SqlClient.SqlCommand(sql, cn)
reader = cmd.ExecuteReader
Dim counter as Integer = 1
While reader.Read
CType(me.Controls.Find("TextBox" + CType(counter,String),False)(0),TextBox).Text = reader.Item("Id").ToString()
CType(me.Controls.Find("Cmb" + CType(counter,String),False)(0),ComboBox).Text = reader.Item("ProductCode").ToString()
CType(me.Controls.Find("Des" + CType(counter,String),False)(0),TextBox).Text = reader.Item("Description").ToString()
CType(me.Controls.Find("Qty" + CType(counter,String),False)(0),TextBox).Text = reader.Item("Qty").ToString()
counter += 1
if counter =3 then Exit While
End While
reader.Close()
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Using
End Sub
Public Sub ResetControls()
For counter = 1 to 3
CType(me.Controls.Find("TextBox" + CType(counter,String),False)(0),TextBox).Text = ""
CType(me.Controls.Find("Cmb" + CType(counter,String),False)(0),ComboBox).Text = ""
CType(me.Controls.Find("Des" + CType(counter,String),False)(0),TextBox).Text = ""
CType(me.Controls.Find("Qty" + CType(counter,String),False)(0),TextBox).Text = ""
Next
End Sub