這很簡單。我知道如何在第一個下拉串列中使用 OnSelectedIndexChange 和一個事件來務實地做到這一點。我試圖找出在架構上做到這一點的最佳方法,因為在我的情況下,我正在處理地鐵站,其中一個特定的車站將有不止一種顏色。
例如帶顏色的第一個下拉串列(即紅色、綠色、紫色)
第二個帶有車站的下拉串列“1st Street - Red and Green” “Bloom Ave - Green” “Titan Station - Red Purple”
因此,如果用戶在第一個下拉串列中選擇紅色,則第二個下拉串列應填充“1st Street”以及 Titan Station”。如果用戶選擇綠色,則應僅顯示“Bloom Ave”。
有許多臺站顏色重疊(不止一種顏色)。
在我看來,正確的方法是創建一個包含站點名稱的表和一個資料型別為 BIT 的每種顏色的列。如果一個站有多個顏色,這些列將設定為 1 或 True。我會有一個會觸發的存盤程序,該程序將根據顏色執行選擇,然后顯示將系結到第二個下拉串列的所有適用站點。
有沒有另一種方法可以完全務實地做到這一點,只是通過下拉選單本身。例如,您在 DropDownList 控制元件中撰寫此邏輯,它知道什么與什么相關聯?
uj5u.com熱心網友回復:
好吧,您當然不想開始或在您的專案中引入某種位行明智的處理,以便為您的解決方案在資料庫領域提供一個相當簡單和“類”的關系模型。
我的意思是,如果你有一個客戶,并且他們有很多發票,那么我們這里就不介紹一些按位處理。(因為 sql server 不能那樣作業)。
因此,如果您有一些客戶,那么如果您需要“許多”發票,那么您可以創建一個發票表。
如果您有一些作業站,它們可以有 1 或 10 種不同的顏色,那么您可以制作一個名為 MyStationColors 的表格。這就是所有資料庫操作的作業方式。
事實上,唯一真正的問題是你想存盤顏色(作為文本名稱),還是我們存盤顏色的 PK id(來自我們的顏色表)。
我傾向于是客戶、顏色還是其他什么?我存盤了 PK id,我們可以隨意顯示一些用戶友好的顏色描述。
所以,我們需要:
Colors - a simple table of all the colors we are going to use
Station - a simple table of all the stations
MyStationColors - a table that lists out all the colors for a given station.
因此,一旦我們有了上述內容,那么這一切都變成了一個相當簡單的 SQL 和資料庫示例。
所以,我們將有 3 張桌子。像這樣說:

現在,我還沒有介紹顏色表之間的任何關系。畢竟,它真的只是一個選擇串列,或者我們的主要顏色串列。但是,如果需要,我們可以向該表添加關系(這將阻止我們洗掉給定站點當前正在使用的顏色。但是,讓我們保持簡單。
因此,我們的第一個組合框將由一個簡單的組合框驅動(填充),我們將其提供給顏色表。
如前所述,我們使用“id”,但組合框可以有兩列,通常是 PK(用于隱藏代碼)和用于向用戶顯示的第二顏色。
所以,放入一個組合框,這樣說:
<asp:DropDownList ID="DropDownList1"
runat="server"
DataValueField="ID"
DataTextField="Color" Width="141px"
AutoPostBack="true" >
</asp:DropDownList>
(不要忘記上面的自動回帖!!!)
請注意下拉串列的“兩”列(隱藏值,顯示文本)。
填充組合的代碼是這樣的:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
LoadCombo()
End If
End Sub
Sub LoadCombo()
Dim cmdSQL As New SqlCommand("SELECT ID, Color FROM Colors ORDER BY Color")
DropDownList1.DataSource = MyrstP(cmdSQL)
DropDownList1.DataBind()
DropDownList1.Items.Insert(0, (New ListItem("Select Color", "0")))
End Sub
現在我們看到/得到這個:

放下盒子,我們看到了:

所以,現在我們要做的就是連接選定的索引更改事件。
但是,在我們這樣做之前,我很懶,讓我們使用 sql studio,并創建一個視圖(一個查詢)來顯示電臺及其顏色。我們用它來“顯示”結果。
因此,sql server 中的新視圖,我們可以通過拖放和 GUI 來完成此操作(畢竟,誰會手動撰寫該 sql,對吧???)。
所以,我們有這個:

當我們在上面運行時,我們得到:

正如我們所見,有些電臺的顏色不止一種,因此它們出現的次數不止一次。但是,我們讓 SSMS 中的查詢構建器為我們構建上面的 sql - 到目前為止所有的拖放操作。
好的,保存該視圖(Vstations)。
現在,我們需要顯示我們選擇的結果。所以,讓我們像這樣放入一個網格視圖:
<asp:DropDownList ID="DropDownList1"
runat="server"
DataValueField="ID"
DataTextField="Color" Width="141px" >
</asp:DropDownList>
<asp:GridView ID="GridView1" runat="server">
</asp:GridView>
現在在下拉屬性表中,我們添加選定的索引事件(雙擊此處:)

現在選擇組合的代碼是這樣的:
Protected Sub DropDownList1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles DropDownList1.SelectedIndexChanged
Dim strSQL As String =
"SELECT * FROM StationsV WHERE COLOR_ID = @COLOR"
Dim cmdSQL = New SqlCommand(strSQL)
cmdSQL.Parameters.Add("@COLOR", SqlDbType.Int).Value = DropDownList1.SelectedItem.Value
GridView1.DataSource = MyrstP(cmdSQL)
GridView1.DataBind()
End Sub
所以,現在當我們選擇一種顏色時,所有具有給定顏色的站點將顯示如下:

現在,我們當然應該清理網格,洗掉“ID”并從該網格中洗掉 color_id。但這只是具體細節。
當然,額外的好處是顯示上面給定電臺的所有顏色。我們可以做到這一點。但是,正如您所看到的,這些問題最好通過使用正確的資料模型來反映具有多種顏色的站點的真實情況。我們不會因此搞砸或引入某種復雜的按位處理。我們當然必須引入一個額外的表格(以跟蹤給定站點的顏色),但是除了這些額外的作業,一旦完成,我們就可以自由地為一個站點添加 1 或 5 種顏色,并且我們不必更改設計,甚至不必為給定顏色假設或添加一些位顏色。
無論是客戶和發票,還是帶有一些顏色的站點——關系資料模型方法往往會使此類問題變得相當容易。
最后但同樣重要的是,我確實厭倦了一遍又一遍地鍵入連接和加載資料表,所以我也使用并擁有這個方便的例程 MyRstP 來回傳資料表。
Public Function MyrstP(sqlCmd As SqlCommand) As DataTable
Dim rstData As New DataTable
Using sqlCmd
sqlCmd.Connection = New SqlConnection(My.Settings.TEST5)
sqlCmd.Connection.Open()
rstData.Load(sqlCmd.ExecuteReader)
End Using
Return rstData
End Function
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/490855.html
