使用具有关系的Access数据库中的内容填充dataGridView

时间:2018-05-06 20:36:06

标签: vb.net

我无法在DataGridView中显示正确的数据。我在访问数据库中有两个表(学生)和(模块),我有显示学生表数据的文本框,但我需要DataGridView来显示他们相应的模块。代码是

  Public Class frnMain

Dim objConnection As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; Data Source = Students.accdb")
Dim objStudentDA As New OleDb.OleDbDataAdapter("Select * From Student", objConnection)
Dim objStudentCB As New OleDb.OleDbCommandBuilder(objStudentDA)
Dim objDataSet As New DataSet()

Dim objModuleDA As New OleDb.OleDbDataAdapter("Select * from Student", objConnection)
Dim objModuleCB As New OleDb.OleDbCommandBuilder(objModuleDA)

Dim Counter As Integer = 1

Private Sub frnMain_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    Retrieve()
    FillStudentDetails()

End Sub

Public Sub Retrieve()

    objDataSet.Clear()

    objStudentDA.FillSchema(objDataSet, SchemaType.Source, "Student")
    objStudentDA.Fill(objDataSet, "student")

    objModuleDA.FillSchema(objDataSet, SchemaType.Source, "Module")
    objModuleDA.Fill(objDataSet, "Module")

    'Set Relationships
    objDataSet.Relations.Clear()
    objDataSet.Relations.Add("student2Module", objDataSet.Tables("Student").Columns("StudentId"),
                             objDataSet.Tables("Module").Columns("StudentId"))


End Sub


Public Sub FillStudentDetails()

    Dim objrow As DataRow
    Dim objModule As DataRow

    objrow = objDataSet.Tables("Student").Rows.Find(Counter)
    objModule = objDataSet.Tables("Module").Rows.Find(Counter)

    mtbStudentId.Text = objrow.Item("StudentId")
    txtName.Text = objrow.Item("StudentName")
    txtAddress.Text = objrow.Item("StudentAddress")

    For Each objModules In objrow.GetChildRows("Student2Module")
        dgvModule.DataSource = objDataSet.Tables(0)
    Next

End Sub

我知道代码在最后的for循环中是错误的我只是在试验我是否能得到它。提前谢谢。

1 个答案:

答案 0 :(得分:1)

我使用固定列修复了它,只是循环遍历另一个表

 dgvModule.ColumnCount = 3
    dgvModule.Columns(0).Name = "Module ID"
    dgvModule.Columns(1).Name = "Module Name"
    dgvModule.Columns(2).Name = "Student Id "



    dgvModule.Rows.Clear()
    For i As Integer = 1 To objDataSet.Tables("Module").Rows.Count
        objModule = objDataSet.Tables("Module").Rows.Find(i)

        If currentId = objModule.Item("StudentId") Then
            Dim row As String() = New String() {(objModule.Item("ModuleId")), objModule.Item("ModuleName"), objModule.Item("StudentId")}
            dgvModule.Rows.Add(row)
        Else

        End If


    Next