下拉菜单中的值(已删除)

时间:2012-09-11 04:42:52

标签: c# asp.net sql drop-down-menu

我有一个从数据库中检索值的下拉菜单

<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>

这将从数据库中检索Plate Number。作为管理员,管理员将选择任何牌号给用户租用。这是一个问题,如何在给用户后删除板号?例如,选择了板A,在管理员点击SAVE按钮后,板A无法再次被选中。板A将从列表中删除。 我希望你能提供一些线索,想法和建议来帮助我。希望能早日得到你的回复。感谢。

5 个答案:

答案 0 :(得分: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)

答案 1 :(得分:1)

按下Save按钮时,通过将flagfordelete列设置为true来标记将板块移除,并更改加载板的查询以排除标记的板。

答案 2 :(得分:1)

这似乎与您的问题之间存在相似之处。其他question。 如果一个管理员将管理预订,方法将有所不同,您必须寻找类似的方法,如下所述

如果你想适应

的方法

我建议您创建另一个临时表,您可以在其中保存CarIDCarCode以及sessionID当用户从下拉菜单中选择一辆汽车时(您可以在选择项目时激活事件)

在此活动中保存carID&amp;临时表中的SessionID

表格结构

 CarTempTable
    CarID xxx
    SessionID varchar(x)
    Date   datetime

一旦你有了CarID&amp;然后,您可以在此表中使用SessionID查询其他用户的主表,其中包含

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

在上述方法中,您必须确保清除会话结束时特定会话的临时表条目。

这种方法应该适合你

编辑:如果是租车,那么在你的桌子上有一个额外的列是好的,根据用户是否预订汽车,该列表示是否有车。你可以使用上面的临时表,因为我不知道你是如何通过付款或其他方式预订

答案 3 :(得分:1)

当用户按下“保存”按钮时,您将不得不再次检查数据库中板的可用性。如果已从管理员中删除所选板,则可以向最终用户显示正确的消息,否则运行代码并保存记录。我希望你明白我的观点。

答案 4 :(得分:1)

您没有说明您使用的是哪种后端数据库,因此我的注释将适用于SQL Server。

bit数据类型列添加到名为“IsSelected”的CarTab表中。将SQL SELECT更改为SELECT [Plate] FROM [CarTab] WHERE ([Model] = @Model) AND IsSelected=0。最初为所有记录将“IsSelected”字段设置为0。选择牌照后,使用记录的主键将IsSelected字段更新为1。然后,只有未选择的记录才会填充DropDownList

如果2个用户加载了数据输入屏幕并且选择了一个牌照,则此解决方案可能存在并发问题。其他用户的屏幕不是最新的。