【问题标题】:Multiselection in vb.net ListBoxvb.net ListBox 中的多选
【发布时间】:2018-08-01 05:09:10
【问题描述】:

我在一个列表框中有一个学生姓名列表,(studentList)我单击框中的一个姓名并获取所有学生的详细信息,即姓名、课程、学科等。然后代码从数据库中获取详细信息(在我的情况下它是访问)然后将其显示在数据网格视图中。 如果我只从一个(或全部)List Boxes 中选择一项,则代码可以正常工作。我的问题是,我可以为每个 LitsBox 选择一个以上的项目吗。我知道我可以使用 SelectedMode 属性来允许突出显示,但不会绘制所需的来自数据库的数据。这是我正在使用 vb.10 的代码

    `Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As  System.EventArgs) Handles Button1.Click
    Dim con As New OleDb.OleDbConnection 

    Dim dbProvider As String
    Dim dbSource As String

    Dim ds As New DataSet

    Dim tables As DataTableCollection = ds.Tables

    Dim source1 As New BindingSource()

    Dim da As New OleDb.OleDbDataAdapter        

    dbProvider = "PROVIDER=Microsoft.ACE.OLEDB.12.0;"

    dbSource = "Data Source = C:\Documents and Settings\Desktop  \studentmarks.accdb"
    con.ConnectionString = dbProvider & dbSource

    con.Open()

    Dim isFirstColumn As Boolean = True
    Dim student As String = ""
    Dim course As String = ""
    Dim grade As String = ""


    Dim x As String = studentList.Text
    Dim y As String = courseList.Text
    Dim z As String = gradeList.Text     


    Dim defaultSQL As String = "SELECT * FROM studentfile "       

    If studentList.SelectedIndex > -1 Then 
        If isFirstColumn Then
            student = "WHERE student = '" & x & "' " 
        Else
            student = "AND student = '" & x & "' "
        End If
        isFirstColumn = False
    End If

    If courseList.SelectedIndex > -1 Then 
        If isFirstColumn Then
            course = "WHERE course = '" & y & "' " 
        Else
            course = "AND course = '" & y & "' "
        End If
        isFirstColumn = False
    End If       

    If gradeList.SelectedIndex > -1 Then 
        If isFirstColumn Then
            grade = "WHERE grade = '" & z & "' " 
        Else
            grade = "AND grade = '" & z & "' "
        End If
        isFirstColumn = False
    End If       

    Dim sql As String = defaultSQL & student & course & grade

    da = New OleDb.OleDbDataAdapter(sql, con)

    da.Fill(ds, "topclass")


    Dim view1 As New DataView(tables(0))

    source1.DataSource = view1
    DataGridView1.DataSource = view1
    DataGridView1.Refresh()
    DataGridView1.DataSource = view1

    DataGridView1.Refresh()

    Dim cnt As Integer

    cnt = DataGridView1.Rows.Count

    TextBox1.Text = cnt - 1

    Dim dayclass As String = TextBox1.Text
    TextBox8.Text = dayclass
    con.Close()


End Sub` 

非常感谢 灰色

【问题讨论】:

  • 在列表框中进行多选是没有意义的。您如何确定哪个学生参加了哪个课程和哪个年级?
  • 嗨,玛丽,我们的想法是,您可以在学生列表中选择 2 个学生并获取他们的所有详细信息,剩下的就是通过程序创建的动态 sql 代码灰猫

标签: sql vb.net


【解决方案1】:

使用 .SelectedItems (以及很多带有 where 子句的 jiggery ......你应该能够使用它来在所有三个列表框中进行单选的多选以及不从任何一个中选择任何内容他们也是……

我唯一的问题是你是否想要所有的'AND',因为这意味着如果你选择了两个学生,你不会得到任何结果......因为没有两个学生是相同的,对吧?除非您选择了两个“戴夫”,否则两者都会返回。例如!

可能会建议更改一些“OR”或查看最终结果可能是什么?无论哪种方式发表评论,如果需要任何进一步的帮助,请告诉我们

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim con As New OleDb.OleDbConnection

    Dim dbProvider As String
    Dim dbSource As String

    Dim ds As New DataSet

    Dim tables As DataTableCollection = ds.Tables

    Dim source1 As New BindingSource()

    Dim da As New OleDb.OleDbDataAdapter

    dbProvider = "PROVIDER=Microsoft.ACE.OLEDB.12.0;"

    dbSource = "Data Source = C:\Documents and Settings\Desktop  \studentmarks.accdb"
    con.ConnectionString = dbProvider & dbSource

    con.Open()


    Dim student As String = ""
    Dim course As String = ""
    Dim grade As String = ""

    Dim defaultSQL As String = "SELECT * FROM studentfile "
    Dim WhereClause As String = ""
    Dim StudentCourseGrade As String
    'Students---------------------------------------------
    For Each stu In studentList.SelectedItems
        StudentCourseGrade = "(student='" & stu & "'"
        For Each crs In courselist.SelectedItems
            StudentCourseGrade = StudentCourseGrade & " AND course = '" & crs & "'"
            For Each grd In gradeList.SelectedItems
                StudentCourseGrade = StudentCourseGrade & " AND grade = '" & crs & "'"
            Next
        Next
        StudentCourseGrade = StudentCourseGrade & ")"

        If WhereClause.Length = 0 Then
            WhereClause = "WHERE " & StudentCourseGrade
        Else
            WhereClause = " OR " & StudentCourseGrade
        End If
    Next
    'Students---------------------------------------------

    Dim SQL As String = defaultSQL & WhereClause

    da = New OleDb.OleDbDataAdapter(sql, con)

    da.Fill(ds, "topclass")


    Dim view1 As New DataView(tables(0))

    source1.DataSource = view1
    DataGridView1.DataSource = view1
    DataGridView1.Refresh()
    DataGridView1.DataSource = view1

    DataGridView1.Refresh()

    Dim cnt As Integer

    cnt = DataGridView1.Rows.Count

    TextBox1.Text = cnt - 1

    Dim dayclass As String = TextBox1.Text
    TextBox8.Text = dayclass
    con.Close()


End Sub

第 鸡

【讨论】:

  • 嗨鸡,谢谢你,你的代码比我的更缩写,但工作方式相同,只允许选择列表中的一项。我正在寻找的是允许在列表框中选择多个项目。例如,如果我的学生列表中有 20 个名字,我可以突出显示多个名字,比如说三个,然后在 DGV 中获取三个学生的详细信息。我可以使用SelectionMode 属性以启用在 ListBox 中突出显示多个项目,但现有代码一次只允许一个学生详细信息。感谢任何帮助
  • 嗨,灰色,它可以让您选择多个,但是,SQL 字符串需要替换为“或”我现在编写一些脚本,可以显示每个学生的特定成绩? - 即您选择多个学生,但只有一个年级,如果这有意义,sql 将是...WHERE (student=A AND grade=1) OR (student=B AND grade=1) OR (student=C AND grade=1)?目前代码是WHERE (student=A AND grade=1) AND (student=B AND grade=1) AND (student=C AND grade=1)
  • 我已经用嵌套的For 更新了答案,如果你只选择三个学生,他们肯定会出现在 DGV 中,如果你然后选择一门课程,它只会显示那些(在您选择的三个学生中)拥有该课程,如果您随后选择一个成绩,它将再次只显示三个具有该成绩的学生,在该课程上:D - 在该课程中完成所有这些并非不切实际VB 而不是 SQL,但这只是让您了解 AND 和 OR 的第一个伙伴的问题!
猜你喜欢
  • 1970-01-01
  • 2016-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-13
相关资源
最近更新 更多