【问题标题】:Value in dropdown menu (Removed)下拉菜单中的值(已删除)
【发布时间】:2012-09-11 04:42:51
【问题描述】:

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

<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 将从列表中删除。 我希望你能通过提供一些线索、想法和建议来帮助我。希望能早日得到你的回复。谢谢。

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      如果你想适应就接近

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

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

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

      这种方法应该适合你

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

          你没有说你使用的是什么类型的后端数据库,所以我的 cmets 将应用于 SQL Server。

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

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

          【讨论】:

          • 嗨,戴夫。谢谢。您的解决方案看起来很有趣。如何将 IsSelected 字段更新为 1?
          • @ColorShadow - 您需要在处理“保存”按钮的单击事件的代码中发送 SQL UPDATE 命令。像UPDATE CarTab SET IsSelected = 1 WHERE id = @RecordID 这样的东西。 id 字段应该是 CarTab 表的主键,@RecordID 需要是所选车牌的主键值。如果车牌是主键,那么UPDATE CarTab SET IsSelected= 1 WHERE Plate=@PlateValue。您需要根据自己的情况调整其中的一些内容,但它应该为您指明可能的解决方案。
          • 嗨,戴夫,为什么当我在 isSelected 0 列中键入 0 时,它说无法识别此单元格
          • @ColorShadow - 你没有说你使用的是什么类型的数据库,所以我真的可以评论你的问题。这些是您作为开发人员需要自己解决的问题。
          【解决方案5】:

          在数据库中将车牌号标记为已删除。

          在您的数据库表中保留一个位字段。当管理员选择车牌号时将其设置为 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?
          猜你喜欢
          • 1970-01-01
          • 2014-06-12
          • 1970-01-01
          • 1970-01-01
          • 2022-11-09
          • 1970-01-01
          • 2015-09-26
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多