2012-09-11 106 views
2

我有一個下拉菜單,從數據庫中檢索值,價值在下拉菜單(刪除)

<asp:DropDownList ID="DropDownList4" runat="server" 
    DataSourceID="SqlDataSource2" DataTextField="Plate" DataValueField="Plate" 
    Height="45px" Width="141px"> 
</asp:DropDownList> 
<asp:SqlDataSource ID="SqlDataSource2" runat="server" 
    ConnectionString="<%$ ConnectionStrings:Connection %>" 
    SelectCommand="SELECT [Plate] FROM [CarTab] WHERE ([Model] = @Model)"> 
     <SelectParameters> 
      <asp:ControlParameter ControlID="DropDownList4" Name="Model" 
       PropertyName="SelectedValue" Type="String" /> 
     </SelectParameters> 
</asp:SqlDataSource> 

這會從數據庫中檢索塔板數。作爲管理員,管理員將選擇要交給用戶租用的任何車牌號碼。這裏是問題,如何在給用戶後刪除板號?例如,選擇A盤,在管理員點擊SAVE按鈕後,A盤不能再次被選擇。板A將從列表中移除。 我希望你能通過提供一些線索,想法和建議來幫助我。希望能早日得到你的回覆。謝謝。

回答

1

將板號標記爲由數據庫中的標誌移除。

在數據庫表中保留一個位域。管理員選擇板號時將其設置爲1。

更新SelectedIndexChanged事件。

<asp:DropDownList ID="DropDownList4" runat="server" 
    DataSourceID="SqlDataSource2" DataTextField="Plate" DataValueField="Plate" 
    Height="45px" Width="141px" OnSelectedIndexChanged="DropDownList4_SelectedIndexChanged" > 
</asp:DropDownList> 

protected void DropDownList4_SelectedIndexChanged"(object sender, EventArgs e) 
{ 
    var connectionString = "your connection string from some configuration"; 
    var updateCmd = "UPDATE [CarTab] SET Rented = 1 WHERE ([Model] = @Model)"; 
    using (SqlConnection connection = new SqlConnection(
       connectionString)) 
    { 
     SqlCommand command = new SqlCommand(updateCmd , connection); 
     command.AddWithValue("@Model", DropDownList4.SelectedValue); 
     command.Connection.Open(); 
     command.ExecuteNonQuery(); 
    } 
} 

在您的SelectCommand檢查與where子句,如果板號已經租出。

SELECT [Plate] FROM [CarTab] WHERE Rented = 0 and ([Model] = @Model) 
+0

對不起,我真的不明白你。 –

+0

我希望現在清楚 – nunespascal

+0

如何設置爲1當管理員選擇板號? –

1

當按下按鈕Save,馬克板上的板作爲去除,通過設置flagfordelete柱爲真,並改變裝載板的查詢,以排除標記板。

1

這似乎有你的問題&其他question之間有相似之處。 方法會有所不同,如果一個一個管理員會明智地管理預訂等,如果你想以適應

你必須尋找類似的做法如下

方法所描述的,我建議你創建另一個臨時表在那裏你可以保存sessionID沿CarIDCarCode當用戶從下拉選擇車上下來(你可以選擇火災事件中的項目)

此事件上保存carID &的SessionID在臨時表

表結構

CarTempTable 
    CarID xxx 
    SessionID varchar(x) 
    Date datetime 

,一旦你在這個表中有CarID &的SessionID,那麼你可以查詢你的其他用戶主表像

SELECT CarID, CarName FROM Cars WHERE CarID NOT IN (SELECT CarID FROM CarTempTable WHERE SessionID <> "'+ SessionIDofUSER+'"; 

查詢中你必須做出上述方法確保在會話結束時清除特定會話的臨時表條目。

這種方法應該爲你

編輯工作:如果是汽車租賃,然後這是好事,對你的表一個額外的列,其表示,如果車是可用的基礎上,如果用戶的書車上。您可以將此與上述臨時表一起使用,因爲我不確定如何通過付款或其他方式進行預訂

1

當用戶按下保存按鈕時,您將不得不再次檢查板塊的可用性數據庫。如果選定的印版已從管理員中刪除,那麼您可以向最終用戶顯示正確的信息,否則運行該代碼並保存記錄。我希望你明白我的觀點。

1

你不會說你正在使用什麼樣的後端數據庫,所以我的意見將適用於SQL Server。

將一個bit數據類型列添加到名爲「IsSelected」的CarTab表。將您的SQL SELECT更改爲SELECT [Plate] FROM [CarTab] WHERE ([Model] = @Model) AND IsSelected=0。對於所有記錄,最初將'IsSelected'字段設置爲0。當選擇板時,使用記錄的主鍵將IsSelected字段更新爲1。那麼只有沒有被選中的記錄會填充你的DropDownList

如果2個用戶加載了數據輸入屏幕並且選擇了一個板塊,則該解決方案可能存在併發問題。其他用戶的屏幕不會是最新的。

+0

嗨Dave。謝謝。你的解決方案看起來有趣如何將IsSelected字段更新爲1? –

+0

@ColorShadow - 您將需要在處理「保存」按鈕的單擊事件的代碼中發送SQL UPDATE命令。像'UPDATE CarTab SET IsSelected = 1 WHERE id = @ RecordID'。 id字段應該是CarTab表的主鍵,@RecordID需要是選定板的主鍵值。如果板是主鍵,那麼'UPDATE CarTab SET IsSelected = 1 WHERE Plate = @ PlateValue'。你需要根據你的情況調整一些,但它應該指向你一個可能的解決方案。 – DaveB

+0

嗨戴夫,爲什麼當我在列中鍵入0 isSelected 0,它表示沒有識別出這個單元格 –