我的Access数据库在单人下几行。某些人的行数是1,但是另一个人的行数超过1。 我想创建标签页来插入该人的详细信息。
创建标签页时,
标签页数必须等于行数。 (如果那个人有04行 - 必须创建04个标签页。
将单独的MS-Access数据库行数据(列)放入该标签页
如果点击第一个标签页:----->该人员详细信息(字段数据/列)的第1行应该包含TextBox
es或Label
s。
如果点击第4个标签页:------>该人员详细信息(字段数据/列)的第4行应该包含TextBox
es或Label
s。
我已使用此代码
根据行数创建了标签页Dim newPage As New TabPage()
Dim RecCount As Integer
While QReaderQ.Read()
RecCount = RecCount + 1 ' Count How many Rows
End While
TabControl1.TabPages.Clear()
For xXx = RecCount To 1 Step -1 ' to Desending Order ---->3,2,1
newPage = New TabPage 'create new instance
If xXx = 1 Then
newPage.Text = "Repeat - 1"
Else
newPage.Text = "Repeat - " & xXx.ToString
End If
TabControl1.TabPages.Add(newPage)
Next
我希望将数据库中的详细信息放入标签页。
示例:
1 st 时间重复数据到第一个标签页(重复数据意味着DB列) 4 th 时间将数据重复到第4个标签页(重复数据意味着DB列)。
答案 0 :(得分:1)
由于您正在使用Access,我将假设您正在使用OleDb
。您没有指出QReaderQ
是什么,但根据名称,它听起来像是OleDbDataReader
。
由于(再次,根据您发布的代码)您希望按降序排列,我建议您使用OleDbDataAdapter
代替 - DataReader是仅向前的,因此您不能按相反顺序进行
我还建议移动代码,将每个标签页创建为自己的函数,并在For循环中调用该函数。
将所有这些放在一起可能看起来像这样:
Dim TabContent As DataTable
' Pass in your selection string and your connection object
Dim Adapter As New OleDbDataAdapter("SELECT * FROM table", con)
Dim newPage As TabPage
' Fill the DataTable TabContent with the result from your select command
Adapter.Fill(TabContent)
TabControl1.TabPages.Clear()
For xXx As Integer = TabContent.Rows.Count To 1 Step -1
' Pass in the current row - use xXx - 1 since the row collection is 0 based
newPage = InitializeTabPage(TabContent.Rows(xXx - 1))
newPage.Text = "Repeat - " + xXx.ToString()
TabControl1.TabPages.Add(newPage)
Next
InitializeTabPage是一个返回TabPage的函数。您需要在此页面上创建控件。
Public Function InitializeTabPage(ByVal Row As DataRow) As TabPage
Dim newPage As New TabPage()
' Create the control and bind the data from the row to them
Return newPage
End Function
在InitializeTabPage
函数中,您从表中获取DataRow。您需要在每个标签页上创建TextBoxes和Labels,然后将相应的数据从行绑定到它们。
例如,如果您有一个名为lblName
的标签,并且您的行Name
中有一列,则可以执行此操作:
lblName.Text = Row("Name").ToString()
一些有用的链接:
A Really Simple Database - VB.NET和Access教程