【问题标题】:Show items in dropdownlist that is not equal to the selected item in other dropdownlist在下拉列表中显示与其他下拉列表中所选项目不相等的项目
【发布时间】:2013-09-27 11:17:25
【问题描述】:

例如我有 5 个带有值的 DropDownList

red, orange, yellow, green, blue

如果DropDownList1选择红色

DropDownList2-5 的选择将是

orange, yellow, green, blue

如果DropDownList2 选择yellow

DropDownList3-5 的选项将是

orange, green, blue

这是我在互联网上找到的代码,这仅适用于 3 DropDownList,但我需要的是 5 DropDownList。无法展开代码 5 DropDownList

VB

导入 System.Data 导入 System.Data.SqlClient

部分类_默认

Inherits System.Web.UI.Page
Private bFlag As Boolean = True

Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
    If Not IsPostBack Then
        FillddlLocations()
    End If
End Sub

'Properties to store selected value in ViewState

Protected Property MemberID1Selection() As String
    Get
        If ViewState("MemberID1Selection") IsNot Nothing Then
            Return ViewState("MemberID1Selection").ToString()
        End If
        Return ""
    End Get
    Set(value As String)
        ViewState("MemberID1Selection") = value
    End Set
End Property

Protected Property MemberID2Selection() As String
    Get
        If ViewState("MemberID2Selection") IsNot Nothing Then
            Return ViewState("MemberID2Selection").ToString()
        End If
        Return ""
    End Get
    Set(value As String)
        ViewState("MemberID2Selection") = value
    End Set
End Property

Protected Property MemberID3Selection() As String
    Get
        If ViewState("MemberID3Selection") IsNot Nothing Then
            Return ViewState("MemberID3Selection").ToString()
        End If
        Return ""
    End Get
    Set(value As String)
        ViewState("MemberID3Selection") = value
    End Set
End Property


Protected Sub FillddlLocations()
    FillDropdown(companyID1)
    FillDropdown(companyID2)
    FillDropdown(companyID3)

    companyID1.Visible = True
    companyID2.Visible = True
    companyID3.Visible = True

End Sub

Protected Sub FillDropdown(ddl As DropDownList)

    Using connAdd = New SqlConnection("Data Source = MENDOZAABBY-PC\SQLEXPRESS; Initial Catalog = ThesisDatabase; Integrated Security= True")
        connAdd.Open()

        Dim sql = "SELECT CompanyName FROM Company Where College = 'CCS'"
        Using cmdAdd = New SqlDataAdapter(sql, connAdd)
            Dim ds2 As New DataSet()
            cmdAdd.Fill(ds2)


            ddl.Items.Clear()
            ddl.DataSource = ds2
            ddl.DataTextField = "CompanyName"
            ddl.DataValueField = "CompanyName"
            ddl.DataBind()
            ddl.Items.Insert(0, New ListItem("Please select a Company", ""))

            ddl.SelectedIndex = 0

        End Using
    End Using
End Sub

Protected Sub IndexChanged(ddlChanged As DropDownList, ddlToFilter1 As DropDownList, ddlToFilter2 As DropDownList)
    Dim removeValue1 As String = If(ddlChanged Is companyID1, MemberID1Selection, (If(ddlChanged Is companyID2, MemberID2Selection, MemberID3Selection)))
    Dim selValue2 As String = If(ddlChanged Is companyID1, MemberID2Selection, (If(ddlChanged Is companyID2, MemberID1Selection, MemberID1Selection)))
    Dim selValue3 As String = If(ddlChanged Is companyID1, MemberID3Selection, (If(ddlChanged Is companyID2, MemberID3Selection, MemberID2Selection)))

    bFlag = False
    'Prevent fireing the code again while changing the index
    If removeValue1 <> "" Then
        Dim item1 As ListItem = ddlToFilter1.Items.FindByValue(removeValue1)
        ddlToFilter1.Items.Remove(item1)
        Dim item2 As ListItem = ddlToFilter2.Items.FindByValue(removeValue1)
        ddlToFilter2.Items.Remove(item2)

    End If

    If selValue3 <> "" Then
        Dim item3 As ListItem = ddlToFilter1.Items.FindByValue(selValue3)
        ddlToFilter1.Items.Remove(item3)
    End If
    If selValue2 <> "" Then
        Dim item4 As ListItem = ddlToFilter2.Items.FindByValue(selValue2)
        ddlToFilter2.Items.Remove(item4)
    End If

    bFlag = False
    ddlToFilter1.SelectedIndex = ddlToFilter1.Items.IndexOf(ddlToFilter1.Items.FindByValue(selValue2))
    ddlToFilter2.SelectedIndex = ddlToFilter2.Items.IndexOf(ddlToFilter2.Items.FindByValue(selValue3))

End Sub

Protected Sub ddlpid1_SelectedIndexChanged(sender As Object, e As EventArgs)
    MemberID1Selection = companyID1.SelectedValue
    If bFlag Then
        FillDropdown(companyID2)
        FillDropdown(companyID3)
        IndexChanged(companyID1, companyID2, companyID3)
    End If
End Sub

Protected Sub ddlpid2_SelectedIndexChanged(sender As Object, e As EventArgs)
    MemberID2Selection = companyID2.SelectedValue
    If bFlag Then
        FillDropdown(companyID1)
        FillDropdown(companyID3)
        IndexChanged(companyID2, companyID1, companyID3)
    End If
End Sub
Protected Sub ddlpid3_SelectedIndexChanged(sender As Object, e As EventArgs)
    MemberID3Selection = companyID3.SelectedValue
    If bFlag Then
        FillDropdown(companyID1)
        FillDropdown(companyID2)
        IndexChanged(companyID3, companyID1, companyID2)
    End If
End Sub

结束类


ASPX

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:DropDownList ID="companyID1" AutoPostBack="true" runat="server" Visible="false" OnSelectedIndexChanged="ddlpid1_SelectedIndexChanged">
    </asp:DropDownList>
    <asp:DropDownList ID="companyID2" AutoPostBack="true" runat="server" Visible="false" OnSelectedIndexChanged="ddlpid2_SelectedIndexChanged">
    </asp:DropDownList>
    <asp:DropDownList ID="companyID3" AutoPostBack="true" runat="server" Visible="false" OnSelectedIndexChanged="ddlpid3_SelectedIndexChanged" >
    </asp:DropDownList>
    </div>
    </form>
</body>
</html>

【问题讨论】:

    标签: asp.net .net vb.net drop-down-menu


    【解决方案1】:

    让我给你一个想法,它会起作用。创建一个矩阵对象。它可以是一个数组。

     Items -> |  red | orange | yellow | green | 
     Controls |      |        |        |       |
        |     |      |        |        |       |
        V     |      |        |        |       |
     _________|______|________|________|_______|
     combo1   |true  | false  | true   |true   |
     _________|______|________|________|_______|
     combo2   |true  | false  | true   |true   |
     _________|______|________|________|_______|
     combo3   |true  |  false | true   |true   |
     _________|______|________|________|_______|
     combo4   |true  |  true  | true   |true   |
     _________|______|________|________|_______|
    

    更新:

    根据这个矩阵,你的界面会有combo4项——全部,其他的combo只有红色、黄色和绿色。

    当接下来单击combo3 并且例如选择黄色时,您将用“true”填充单元格“combo3/yellow”,而黄色下的其他剩余单元格-“false”。

     Items -> |  red | orange | yellow | green | 
     Controls |      |        |        |       |
        |     |      |        |        |       |
        V     |      |        |        |       |
     _________|______|________|________|_______|
     combo1   |true  | false  | false  |true   |
     _________|______|________|________|_______|
     combo2   |true  | false  | false  |true   |
     _________|______|________|________|_______|
     combo3   |true  |  false |  true  |true   |
     _________|______|________|________|_______|
     combo4   |true  |  true  | false  |true   |
     _________|______|________|________|_______|
    

    知道了吗?

    现在,开发逻辑,在您单击组合时将这些“单元格”设置为 false。 一开始,所有控件都可以使用所有颜色 - “true”。然后单击一个(任何)组合。您保留该控制/颜色单元。然后你基于这个矩阵构建你的 UI。每次点击您都有回传,并且您的控件将重新填充可用的颜色。

    最好的部分 - 您将能够拥有任意数量的控件或项目。一旦你用完项目或失去控制,你就不能填充控制 :o)

    【讨论】:

    • 下拉列表的项目来自数据库,所以我不知道如何显示其他下拉列表中未选择的项目。
    • 物品来自哪里、数据库或任何其他来源都没有关系。构建一个矩阵,当在您的组合中选择时,将项目标记为“已选择”或“true”,而对于矩阵中的其他组合,将相同的项目标记为“无法选择”或 false。然后只加载对您的连击有效的项目。这很容易
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-01
    • 2013-09-02
    相关资源
    最近更新 更多