2013-09-27 57 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

也看到我的更新。 –