多个级联组合框 [英] Multiple Cascading Comboboxes

查看:87
本文介绍了多个级联组合框的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所有您好,
I''m在VB.NET级联组合框寻求帮助.我特地填充使用3-单独的数据表3个组合框.我愿意消除一下我的第二个组合框,以基于第一组合框等的设定值的变化......我的表的定义如下:

表1
-------
ID_1
NAME_1
-

表2
-------
ID_2
NAME_2
ID_1


表3
-------
ID_3
NAME_3
ID_2

谢谢

解决方案

没问题,

这里是你做了什么

使用时只需将选择的值从第一个下拉加载下一个,依此类推......

这是你的下拉列表
< ASP:DropDownList的RUNAT = 服务器" ID = DDL" DataValueField = IDFIELD" DataTextField = 文本框" OnSelectedIndexChanged = ddl_OnSelectedIndexChanged"/>

受保护的void Page_Load(对象发送者,EventArgs e)
{
ddlOne.Datasource = SelectCommand中();
ddlOne.DataBind();
}

保护无效ddl_OnSelectedIndexChanged(对象发件人,EventArgs的)
{
ddlNext.DataSource =的SelectCommand(ddlOne.SelectedValue);
ddlNext.DataBind();
}


我希望这有助于,,,如果不是,应对和我将在一个实际的例子扔你.

另外,如果你不太想要的网页每次回来后,你可以包装在一个UpdatePanel :)
此页
快乐编码!
雪佛兰
感谢您的答复.我尝试以下,但i''m得到一个空异常错误:

<预LANG = VB"> <跨度类= 代码关键字">私人 <跨度类= 代码关键字">子 ComboBox1_SelectedIndexChanged(<跨度类= 代码关键字"> ByVal 发​​件人 As 系统.对象 ByVal 电子<跨度类= 代码关键字">为 System.EventArgs)<跨度类= 代码关键字">把手 ComboBox1.SelectedIndexChanged ComboBox2.DataSource = ds.Tables(<跨度类= 代码串"> <跨度类=" 代码串 >节").行(ComboBox1.SelectedValue).Item( <跨度类= 代码串"> <跨度类=" 代码串 > DEPT_ID") 结束



如果你可以发布你的例子将是巨大的.

感谢


好,特殊照顾在正确的轨道上,但特殊照顾试图绑定的控制为单个值. I''ll尝试给你一个工作示例:

<预郎= vbnet"> <跨度类= 代码关键字">进口 System.Data.OleDb 公共 Form1 私有 const dbLoc As 字符串 = " <跨度类=代码关键字">私人 <跨度类=代码关键字"> CONST 密码<跨度类=代码关键字">为 <跨度类= 代码关键字">字符串 = <跨度类=代码串"> <跨度类="代码串>东西" <跨度类=代码关键字">公共的ConnectionString <跨度类=代码关键字">为的OleDbConnection <跨度类=代码关键字">公共 boolLoading <跨度类=代码关键字">为 <跨度类=代码关键字">布尔 私有 Form1_Load( ByVal 发​​件人 As 系统.对象,_ ByVal e As System.EventArgs)_ 句柄 MyBase . <跨度类=代码注释">' <跨度类=‘代码注释’>成立的connectionString 的connectionString = <跨度类= 代码关键字">新 OleDb.OleDbConnection(<跨度类= 代码串"> <跨度类=" 代码串>提供商=微软. Jet.OLEDB.4.0;&安培; _ " & dbLoc&安培; _ <跨度类= 代码串"> <跨度类=" 代码串 >;喷射OLEDB:数据库密码="&安培;密码) <跨度类=代码注释">' <跨度类=‘代码注释’>打开的connectionString 尝试 connectionString.Open() 捕获,例如 As 异常 MessageBox.Show(例如消息) 结束 尝试 <跨度类=代码注释">' <跨度类=‘代码注释’>建立数据集 <跨度类=代码关键字">昏暗 c​​bo1DataSet <跨度类=代码关键字">为 <跨度类=代码关键字">新数据集 <跨度类=代码关键字">昏暗 myDataAdapter <跨度类=代码关键字">为 OleDbDataAdapter的 <跨度类=代码关键字">昏暗 SQL <跨度类=代码关键字">为 <跨度类=代码关键字">字符串 = <跨度类= 代码串"> <跨度类=" 代码串 > SELECT * FROM TreeData;" myDataAdapter = <跨度类= 代码关键字">新 OleDbDataAdapter的(SQL,ConnectionString的) myDataAdapter.Fill(cbo1DataSet," ) myDataAdapter.Dispose() boolLoading = <跨度类= 代码关键字">真 <跨度类=代码注释">' <跨度类=‘代码注释’>设置在组合框 <跨度类=代码关键字">使用 ComboBox1 .DataSource = cbo1DataSet.Tables(<跨度类= 代码串"> <跨度类=" 代码串 > TreeData") .DisplayMember = " .ValueMember = <跨度类= 代码串"> <跨度类=" 代码串 >数据ID" .SelectedIndex = <跨度类= 代码位"> 0 结束 使用 boolLoading = <跨度类= 代码关键字">假 <跨度类=代码注释">' <跨度类=‘代码注释’>靠近所述的connectionString connectionString.Close() 结束 <跨度类=代码关键字">私人 <跨度类=代码关键字">子 ComboBox1_SelectedIndexChanged(<跨度类=代码关键字"> BYVAL 发送方<跨度类=代码关键字">为系统.<跨度类=代码关键字">对象,_ <跨度类=代码关键字"> BYVAL 电子<跨度类=代码关键字">为 System.EventArgs)<跨度类=代码关键字">把手 ComboBox1.SelectedIndexChanged <跨度类=代码关键字">如果 boolLoading <跨度类=代码关键字">然后 <跨度类=代码关键字">返回 <跨度类=代码注释">' <跨度类=‘代码注释’>打开的connectionString 尝试 connectionString.Open() 捕获,例如 As 异常 MessageBox.Show(例如消息) 结束 尝试 <跨度类=代码注释">' <跨度类=‘代码注释’>建立数据集 <跨度类=代码关键字">昏暗 c​​bo2DataSet <跨度类=代码关键字">为 <跨度类=代码关键字">新数据集 Dim myDataAdapter As OleDbDataAdapter <跨度类=代码关键字">昏暗 SQL <跨度类=代码关键字">为 <跨度类=代码关键字">字符串 = <跨度类= 代码串"> <跨度类=" 代码串 > SELECT * FROM数据WHERE ID ="&安培; ComboBox1.SelectedValue&安培; " myDataAdapter = <跨度类= 代码关键字">新 OleDbDataAdapter的(SQL,ConnectionString的) myDataAdapter.Fill(cbo2DataSet,<跨度类= 代码串"> <跨度类=" 代码串 >数据") myDataAdapter.Dispose() <跨度类=代码注释">' <跨度类=‘代码注释’>设置在组合框 <跨度类=代码关键字">使用 ComboBox2 .DataSource = cbo2DataSet.Tables(<跨度类= 代码串"> <跨度类=" 代码串 >数据") .DisplayMember = <跨度类= 代码串"> <跨度类=" 代码串 >名称" .ValueMember = <跨度类= 代码串"> <跨度类=" 代码串 > ID" .SelectedIndex = <跨度类= 代码位"> 0 结束 使用 <跨度类=代码注释">' <跨度类=‘代码注释’>靠近所述的connectionString connectionString.Close() 结束 结束


Hi All,
I''m looking for help with cascading combo boxes in VB.NET. I''ve populated 3 combo boxes using 3 separate Data Tables. I''d like my second combo box to change based on the selected value of the first combo box etc... My Tables are defined as follows:

Table 1
-------
ID_1
Name_1
-

Table 2
-------
ID_2
Name_2
ID_1


Table 3
-------
ID_3
Name_3
ID_2

Thanks

解决方案

No problem,

Here is what you do

Simply use the selected value from the first dropdown to load the next, and so on...

This is your dropdown list
<asp:DropDownList runat="server" ID="ddl" DataValueField="IDFIELD" DataTextField="TEXTFIELD" OnSelectedIndexChanged="ddl_OnSelectedIndexChanged" />

protected void Page_Load(object sender, EventArgs e)
{
ddlOne.Datasource = selectcommand();
ddlOne.DataBind();
}

protected void ddl_OnSelectedIndexChanged(object sender, EventArgs e)
{
ddlNext.DataSource = selectcommand(ddlOne.SelectedValue);
ddlNext.DataBind();
}


I hope this helps,,, if not, respond and I will throw in an actual example for you.

Also, if you don''t want the page to post back every time, you can wrap this page in an UpdatePanel :)

happy coding!


Hi Chevy,
Thanks for your response. I tried the following but i''m getting a Null Exception Error:

Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
       ComboBox2.DataSource = ds.Tables("Sections").Rows(ComboBox1.SelectedValue).Item("Dept_ID")
   End Sub



If you could post your example it would be great.

Thanks


Well, you''re on the right track, but you''re trying to bind a control to a single value. I''ll try to give you a working example:

Imports System.Data.OleDb

Public Class Form1
    Private Const dbLoc As String = "D:\something.mdb"
    Private Const password As String = "something"
    Public connectionString As OleDbConnection
    Public boolLoading As Boolean

    Private Sub Form1_Load(ByVal sender As System.Object, _
                           ByVal e As System.EventArgs) _
                Handles MyBase.Load
        'Set up the connectionString
        connectionString = New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;" & _
                                                     "Data Source=" & dbLoc & _
                                                     ";Jet OLEDB:Database Password=" & password)

        'Open the connectionString
        Try
            connectionString.Open()
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try

        'Set up the dataset
        Dim cbo1DataSet As New DataSet
        Dim myDataAdapter As OleDbDataAdapter
        Dim sql As String = "SELECT * FROM TreeData;"
        myDataAdapter = New OleDbDataAdapter(sql, connectionString)

        myDataAdapter.Fill(cbo1DataSet, "TreeData")
        myDataAdapter.Dispose()

        boolLoading = True
        'Set up the ComboBox
        With ComboBox1
            .DataSource = cbo1DataSet.Tables("TreeData")
            .DisplayMember = "Display_Name"
            .ValueMember = "DataID"
            .SelectedIndex = 0
        End With
        boolLoading = False

        'close the connectionString
        connectionString.Close()
    End Sub

    Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, _
            ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
        If boolLoading Then Return

        'Open the connectionString
        Try
            connectionString.Open()
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try

        'Set up the dataset
        Dim cbo2DataSet As New DataSet
        Dim myDataAdapter As OleDbDataAdapter
        Dim sql As String = "SELECT * FROM Data WHERE ID=" & ComboBox1.SelectedValue & ";"
        myDataAdapter = New OleDbDataAdapter(sql, connectionString)

        myDataAdapter.Fill(cbo2DataSet, "Data")
        myDataAdapter.Dispose()

        'Set up the ComboBox
        With ComboBox2
            .DataSource = cbo2DataSet.Tables("Data")
            .DisplayMember = "Name"
            .ValueMember = "ID"
            .SelectedIndex = 0
        End With

        'close the connectionString
        connectionString.Close()
    End Sub
End Class


这篇关于多个级联组合框的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆