从 MS Access 数据库行填充 VB 组合框
Posted
技术标签:
【中文标题】从 MS Access 数据库行填充 VB 组合框【英文标题】:Populate a VB combo box from a MS Access database row 【发布时间】:2015-12-09 10:59:16 【问题描述】:我试图将一列整行添加到组合框中。 当我尝试时,它要么只显示该列的最后一行,要么只显示最后一行 35 次。
我错过了什么?这真让我抓狂。我为评论的行道歉,我正在尝试一些不同的编码。
Option Strict On
Imports System.Data.OleDb
Imports ShadowLogin.GlobalVariables
Public Class DeptNewSch
Private Sub btnExit_Click(sender As Object, e As EventArgs) Handles btnExit.Click
Me.Close()
ShadowMain.Show()
End Sub
Private Sub DeptNewSch_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim CourseArray(35, 2) As String
Using cnnOLEDB = New OleDbConnection(strConnectionString)
Dim NewSchDS As DataSet
Dim NewSchTables As DataTableCollection
Dim NewSchsource1 As New BindingSource
NewSchDS = New DataSet
NewSchTables = NewSchDS.Tables
Using cmd As New OleDbCommand("SELECT ClassSection.CourseTitle AS Course, ClassSection.SectionNumber AS [Section Number], ClassSection.ScheduleNumber AS [Schedule Number], Course.ShortTitle AS [Course Title], Course.Units, ClassSection.Type AS Format, ClassSection.TimeSlot AS [Days / Time], ClassSection.RoomID AS Location, Faculty.[First Name], Faculty.[Last Name], Clas-s-room.MaxCapacity AS Seats FROM [Clas-s-room], [ClassSection], [Faculty], [Course] WHERE (ClassSection.FRedID = Faculty.FRedID) AND Course.CourseTitle = ClassSection.CourseTitle AND Clas-s-room.RoomID = ClassSection.RoomID AND ClassSection.ScheduleYear=@Year AND ClassSection.Semester=@Semester;", cnnOLEDB)
cmd.Parameters.Add("@Year", OleDbType.VarWChar).Value = Convert.ToInt32(strYear.ToString())
cmd.Parameters.Add("@Semester", OleDbType.VarWChar).Value = strSemester.ToString()
Using NewSchDA As OleDbDataAdapter = New OleDbDataAdapter(cmd)
NewSchDA.Fill(NewSchDS, "New Semester") 'Change items to your database name
Dim view As New DataView(NewSchTables(0))
NewSchsource1.DataSource = view
dgNewSch.DataSource = view
Me.dgNewSch.Columns("Course").Width = 60
Me.dgNewSch.Columns("Section Number").Width = 50
Me.dgNewSch.Columns("Schedule Number").Width = 60
Me.dgNewSch.Columns("Course Title").Width = 190
Me.dgNewSch.Columns("Units").Width = 40
Me.dgNewSch.Columns("Format").Width = 70
Me.dgNewSch.Columns("Days / Time").Width = 100
Me.dgNewSch.Columns("Location").Width = 70
Me.dgNewSch.Columns("First Name").Width = 80
Me.dgNewSch.Columns("Last Name").Width = 80
Me.dgNewSch.Columns("Seats").Width = 50
End Using
End Using
End Using
'Connect to Database and get the registration information
Using cnnOLEDB = New OleDbConnection(strConnectionString)
' Query the classschedule table for start of semester datas
Using cmdOleDB = New OleDbCommand("SELECT [CourseTitle], [ShortTitle],[Units] FROM [Course] WHERE rownumber =@row", cnnOLEDB)
cnnOLEDB.Open()
Using rdrOLEDB = cmdOleDB.ExecuteReader
While rdrOLEDB.Read
Dim l As Integer
For l = 0 To 35
'cmdOleDB.Parameters.Add("@row", OleDbType.VarWChar).Value = l
CourseArray(l, 0) = rdrOLEDB.Item(0).ToString
CourseArray(l, 1) = rdrOLEDB.Item(1).ToString
CourseArray(l, 2) = rdrOLEDB.Item(2).ToString
Next
' CboFormat.Items.Add()
' CboDayTime.Items.Add()
' CboLocation.Items.Add()
' CboName.Items.Add()
End While
End Using
End Using
End Using
For z As Integer = 0 To 35
CboCourse.Items.Insert(z, CourseArray(z, 0).ToString)
Next
End Sub
结束类
您可以猜到这是我一直在处理的代码。 如果我试图做的事情是可能的,任何帮助都会很棒。
【问题讨论】:
循环是否准确预测了 35 条记录?根据数据,CBO 可以绑定到一个列表,其中包含像 DGV 一样读取的行 ...aList(Of Course)
或几乎任何东西都会比二维数组更好。 [查看示例](***.com/a/34164458/1070452)
所以你是说最好只写在课程的各个行中? (抱歉还没睡)
不,我会从数据库加载数据,但我会使用数组以外的东西来存储数据。该链接显示某人正在做您的工作,以及另一种选择。此外,期望正好有 35 门课程是非常糟糕的。
感谢您的帮助,我会查看您发送给我的列表(当然)链接。该项目是一个影子系统,我们获得的数据有限,因此由于我们没有创建新课程,因此它的限制为 35 门课程
【参考方案1】:
每次读取数据源中的记录时,都会运行 0 到 35 循环。
While rdrOLEDB.Read
Dim l As Integer
For l = 0 To 35
'cmdOleDB.Parameters.Add("@row", OleDbType.VarWChar).Value = l
CourseArray(l, 0) = rdrOLEDB.Item(0).ToString
CourseArray(l, 1) = rdrOLEDB.Item(1).ToString
CourseArray(l, 2) = rdrOLEDB.Item(2).ToString
Next
Name.Items.Add()
End While
【讨论】:
有没有办法在不记录之前的数据的情况下进行循环? 为什么需要循环?每次通过 While 循环就增加 l。 我应该问是否有更好的方法来做到这一点? 没关系,但我会从 While 循环内部将项目直接添加到 Names 对象,而不是构建字符串数组。 我正在获取课程名称以从数据库中填充组合框,因此如果数据库已更新,则应使用新课程名称更新此 cbo。 (如果这听起来很奇怪,请道歉,整天都在做这个,我的大脑变得糊状了)以上是关于从 MS Access 数据库行填充 VB 组合框的主要内容,如果未能解决你的问题,请参考以下文章