我有一个从数据库中检索值的下拉菜单
<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将从列表中删除。 我希望你能提供一些线索,想法和建议来帮助我。希望能早日得到你的回复。感谢。
答案 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。 如果一个管理员将管理预订,方法将有所不同,您必须寻找类似的方法,如下所述
如果你想适应
的方法我建议您创建另一个临时表,您可以在其中保存CarID
或CarCode
以及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个用户加载了数据输入屏幕并且选择了一个牌照,则此解决方案可能存在并发问题。其他用户的屏幕不是最新的。