根据listbox access数据库vb.net中的选择显示GroupBox
我有一个带有地址的access数据库表和一个带有地址类型的表。 当我添加一个新关系时,会有不同的分组框,其中包含根据地址类型显示的附加信息。 例如:患者只有基本地址信息。 医生也需要参考号,所以如果我点击关系类型“医生”,地址分组框应该会出现,但也会出现带有医生参考号的分组框文本框。 实例还应该获得实例groupbox+地址groupbox等。 地址也可以是“多种类型”,所以如果一个地址是A:医生,B:实例,这两个框都应该出现。 我当前的代码如下所示:根据listbox access数据库vb.net中的选择显示GroupBox,vb.net,ms-access,listbox,visual-studio-2019,Vb.net,Ms Access,Listbox,Visual Studio 2019,我有一个带有地址的access数据库表和一个带有地址类型的表。 当我添加一个新关系时,会有不同的分组框,其中包含根据地址类型显示的附加信息。 例如:患者只有基本地址信息。 医生也需要参考号,所以如果我点击关系类型“医生”,地址分组框应该会出现,但也会出现带有医生参考号的分组框文本框。 实例还应该获得实例groupbox+地址groupbox等。 地址也可以是“多种类型”,所以如果一个地址是A:医生,B:实例,这两个框都应该出现。 我当前的代码如下所示: Public Class NewRela
Public Class NewRelationForm
'groupboxen disablen on load
Me.grpKiesUwRelatietype.Visible = True
Me.grpBasisData.Visible = False
Me.grpDataBI.Visible = False
Me.grpFoto_Nota.Visible = False
Me.grpHuisartsData.Visible = False
Me.grpPartijData.Visible = False
Me.grpVerwijzerdata.Visible = False
End Sub
'KNOPPEN en Functies!
Private Sub NewRelationForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Me.Tbl_TypeTableAdapter1.Fill(Me.PatientenDatabaseDataSetX1.tbl_Type)
Me.Tbl_OnderzoeksTypesTableAdapter.Fill(Me.PatientenDatabaseDataSetX1.tbl_OnderzoeksTypes)
Me.Tbl_RelatiesTableAdapter.Fill(Me.PatientenDatabaseDataSetX.tbl_Relaties)
End Sub
Private Sub btnAddRelation_Click(sender As Object, e As EventArgs) Handles btnAddRelation.Click
FormMakeRelationType.Show()
End Sub
Private Sub lboxRelatieTypes_SelectedIndexChanged(sender As Object, e As EventArgs) Handles lboxRelatieTypes.SelectedIndexChanged
End Sub
'Private Sub lboxRelatieTypes_SelectedIndexChanged(sender As Object, e As EventArgs) Handles lboxRelatieTypes.SelectedIndexChanged
''If ComboBox1.SelectedIndex = 1 Then
'' grpBasisData.Visible = True
'' grpFoto_Nota.Visible = True
'' grpFoto_Nota.Location = New Point(720, 120)
''End If
'End Sub
End Class
我真的可以用一个指针来做这件事,我试过if-else,我试过select-case,但我找不到“正确的方法”。
我是初学者
edit1:这是winform中的图片:
这是访问数据库(数据库中的名称出于隐私目的而更改)
我制作了一个代码示例,根据列表框显示groupbox中的文本框 表单加载事件:
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim con As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\PatientenDatabase.mdb")
con.Open()
Dim sql As String = "select Type_Naam from tbl_type"
Dim command As New OleDbCommand(sql, con)
Dim reader As OleDbDataReader = command.ExecuteReader()
While reader.Read()
ListBox1.Items.Add(reader.GetString(0))
End While
con.Close()
End Sub
Listboxindexchanged事件:
Private Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox1.SelectedIndexChanged
Dim curItem As String = ListBox1.SelectedItem.ToString()
Dim con As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\PatientenDatabase.mdb")
con.Open()
Dim sql As String = String.Format("select * from tbl_Relaties where Rel_Type='{0}'", curItem)
Dim command As New OleDbCommand(sql, con)
Dim reader As OleDbDataReader = command.ExecuteReader()
If reader.HasRows Then
While reader.Read()
txtID.Text = reader.GetValue(0).ToString()
txtType.Text = reader.GetValue(1).ToString()
txtName.Text = reader.GetValue(2).ToString()
txtVoo.Text = reader.GetValue(3).ToString()
txtAdress.Text = reader.GetValue(4).ToString()
End While
Else
txtID.Text = String.Empty
txtType.Text = String.Empty
txtName.Text = String.Empty
txtVoo.Text = String.Empty
txtAdress.Text = String.Empty
End If
con.Close()
End Sub
最终结果:
此外,我只编写了几个列代码,您可以按照上面的代码来完成其余的代码。我找到了它。。。
根据stackoverflow中的一篇文章:
如果有人知道如何使这段代码“更容易处理”或“更紧凑”,我会非常乐于接受这些想法。
另外:我只能选择一个,其余的分组框不显示,因此需要一些微调,但我有90%在那里
Private Sub lboxRelatieTypes_SelectedIndexChanged(sender As Object, e As EventArgs) Handles lboxRelatieTypes.SelectedIndexChanged
If lboxRelatieTypes.Text.Trim.Contains("Patiënt") = True Then
Me.grpBasisData.Visible = True
Me.grpDataBI.Visible = False
Me.grpFoto_Nota.Visible = True
Me.grpHuisartsData.Visible = False
Me.grpPartijData.Visible = False
Me.grpVerwijzerdata.Visible = False
ElseIf lboxRelatieTypes.Text.Trim.Contains("Verwijzer") = True Then
Me.grpBasisData.Visible = True
Me.grpDataBI.Visible = False
Me.grpFoto_Nota.Visible = True
Me.grpHuisartsData.Visible = False
Me.grpPartijData.Visible = False
Me.grpVerwijzerdata.Visible = True
ElseIf lboxRelatieTypes.Text.Trim.Contains("Betalende Instantie") = True Then
Me.grpBasisData.Visible = True
Me.grpDataBI.Visible = True
Me.grpFoto_Nota.Visible = True
Me.grpHuisartsData.Visible = False
Me.grpPartijData.Visible = True
Me.grpVerwijzerdata.Visible = False
ElseIf lboxRelatieTypes.Text.Trim.Contains("Huisarts") = True Then
Me.grpBasisData.Visible = True
Me.grpDataBI.Visible = False
Me.grpFoto_Nota.Visible = True
Me.grpHuisartsData.Visible = True
Me.grpPartijData.Visible = False
Me.grpVerwijzerdata.Visible = False
ElseIf lboxRelatieTypes.Text.Trim.Contains("Huisarts" & "Betalende Instantie") = True Then
Me.grpBasisData.Visible = True
Me.grpDataBI.Visible = True
Me.grpFoto_Nota.Visible = True
Me.grpHuisartsData.Visible = True
Me.grpPartijData.Visible = False
Me.grpVerwijzerdata.Visible = False
End If
'Dim curitem As String = lboxRelatieTypes.SelectedItems.ToString()
'Dim con As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=F:\GoogleDrive\EINDWERK VBNET\PatientenDatabase.accdb")
'con.Open()
'Dim sql As String = String.Format("select * from tbl_Relaties where Rel_Type='{0}'", curitem)
'Dim command As New OleDbCommand(sql, con)
'Dim reader As OleDbDataReader = command.ExecuteReader()
'If curitem.Contains "Huisarts" Then
' End If
'con.Close()
@lzzy,你能提供access数据库中的表和你在winform中设计的图像吗?它能让你的问题更清楚。@JackJJun MSFT:我添加了你的请求data@lzzy,根据我的测试,我发现以下问题。首先,我没有看到数据库中的addresses and address types表。其次,您提供的大部分代码都是与您的问题无关,请删除它们。第三,我认为您需要澄清您的需求和逻辑,以便其他人更清楚地理解您的问题。@JackJJun MSFT:我删除了不需要的代码。这些表是tbl_Relaties(荷兰语表示“relations”)和tbl_类型。“formMakeRelationType”形式具有更新tbl_类型表的代码,并使用此表单中的关系类型工作和更新列表框。因为关系可以同时是多种类型,但不是每个地址都“需要”某些类型的信息,如果我不选择listbox中的类型,则不应显示包含该不相关信息的groupbox,以免显示太多数据。我的想法是根据选择来执行select case代码,以显示groupbox。@lzzy,有什么更新吗?J Jun:您的示例很好,但这不是问题;-)。我的数据库中的关系可以是“多种类型”。医生也可以是转发器,付费瞬间也可以是医生和转发器,多个组合是可能的。因此,列表框是“multiselect”。每种类型都有自己的额外分组框,其中包含特定的额外信息。因此,如果我选择“patient”,groupbox 1和3必须可见,如果它也是一个付费实例,groupbox 4也必须可见。等等由于该表单是“添加新关系”表单,因此无需将数据放入文本框,仅在需要时显示。如是:只要我单击GroupBox,就会显示所需的文本框,以便填写必要的数据。添加类型时,GroupBox设置为“不可见”,并设置为“可见”。我尝试使用“for each”和“select case”,但找不到合适的syntax@lzzy,你提供的gif不清楚,你能给我一个新屏幕来告诉我你想做什么吗。Jun:屏幕看起来是这样的(),所以当我想添加一个关系类型“patient”,它也是一个“paying instance”时,我会选择左边列表框中的那些。选择时,应显示响应该类型的GroupBox。我的gif视频太小了,我知道,但它显示了needed@lzzy,您的意思是可以根据数据库中的关系显示正确的分组框吗?如果是,请告诉我具体关系。