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,管理员点击保存按钮后,板 A 无法再次选择。板 A 将从列表中删除。我希望你能通过提供一些线索、想法和建议来帮助我。希望能早日得到你的回复。谢谢。

4

5 回答 5

1

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

如果你想适应就接近

我建议您创建另一个临时表,您可以在其中保存或CarID当用户从下拉列表中选择汽车时(您可以在选择项目时触发事件) CarCodesessionID

在此事件中,将 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+'";

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

这种方法应该适合你

编辑:如果是汽车租赁,那么最好在您的表中添加一个额外的列,根据用户是否预订汽车来说明汽车是否可用。您可以将其与上述临时表一起使用,因为我不确定您是如何通过付款或其他方式进行预订的

于 2012-09-11T04:55:06.267 回答
1

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

于 2012-09-11T04:55:46.687 回答
1

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

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

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

于 2012-09-11T04:57:51.337 回答
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)
于 2012-09-11T04:45:39.270 回答
1

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

于 2012-09-11T04:50:41.507 回答