2013-09-27 59 views
0

实施例所选择的项目我有5 DropDownList与值显示项不等于在其它下拉列表

red, orange, yellow, green, blue 

如果DropDownList1选择红色

DropDownList2-5的选择将是

orange, yellow, green, blue 

if DropDownList2 select yellow

DropDownList3-5的选择将是

orange, green, blue 

这是我在网上找到的代码,这只是针对3 DropDownList但我需要的是5 DropDownList。我不能展开码5 DropDownList

VB

进口System.Data 进口System.Data.SqlClient的

偏类_Default

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> 

回答

0

让我给你一个想法,这将正常工作。创建一个矩阵对象。它可能是一个数组。

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项目 - 所有,其他连击只会有红色,黄色和绿色。

当combo3被点击下一个,例如,选择黄色时,您将填充单元格“combo3/yellow”为“true”,其他剩余单元格为黄色 - “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。 开始时,所有颜色都可用于所有控件 - “真”。然后你点击一个(任何)组合。您保留该控件/颜色单元格。然后你基于这个矩阵建立你的用户界面。随着每次点击你有回发,你的控件将重新填充可用的颜色。

最好的部分 - 您将能够拥有任意数量的控件或项目。一旦你耗尽物品或失去控制,你不能控制:o)

+0

下拉列表中的项目是从数据库中,所以我不知道如何显示未在其他下拉列表中选择的项目。 – Abigail

+0

物品来自哪里,数据库或任何其他来源无关紧要。建立一个矩阵,当在你的组合中被选中时,将项目标记为“选定”或“真实”,而对于矩阵中的其他组合则标记与“无法选择”相同的项目或错误。然后加载只对你的连击组合正确的物品。这很容易 –

+0

也看到我的更新。 –