我有24个按钮,其中有24小时的书写时间。
button1.Text="01:00"
button2.Text="02:00"
button3.Text="03:00"
...
button24.Text="00:00"
我有一个标签显示了今天的日期
DateTime todayDate = DateTime.Now;
lblTodayDate.Text = todayDate.ToString("dd/MM/yyyy");
每当用户单击这24个按钮中的任何一个时,该用户都会注册约会。例如,如果用户单击button3.Text="03:00"
,则表示用户已约会(今天为3:00),并且该记录将保存在数据库MS-SQL中。当另一个用户访问此页面时,不应启用此按钮,因为今天某个人已经进行了约会,但明天必须再次启用它,直到一个用户单击它为止。
在PageLoad中,我想创建一个方法,该方法将进入数据库并检查是否存在具有相同日期和时间的约会,如果是,则不应启用该按钮。启用其他按钮。
protected void CheckIfOrderAvailable()
{
SqlConnection con = new SqlConnection();
string cs = ConfigurationManager.ConnectionStrings["dbconnection"].ConnectionString;
con.ConnectionString = cs;
con.Open();
SqlCommand cmd = new SqlCommand();
var buttons = new Button[] { button1, button2...button24 };
foreach (var btn in buttons)
cmd.CommandText = "select * from clientOrder where TodayDateToCompare='" + lblTodayDate.Text + " and service_time='" + btn.Text + "'";
cmd.Connection = con;
SqlDataReader rd1 = cmd.ExecuteReader();
if (rd1.HasRows)
{
foreach (var btn in buttons)
{
btn.Enabled = false;
btn.BackColor = System.Drawing.Color.Red;
}
con.Close();
}
}
如果有人能帮助解决这个问题,我将不胜感激。
答案 0 :(得分:1)
首先,您没有提供表结构,并且我们不知道您是否在使用Entity Framework,所以我的答案将主要是在psudo代码上。
因为您将约会保存在数据库中,所以您应该做的是
1-在网络表单页面加载事件中,您应该从te数据库中获取约会
2-使用类似这样的方法获取表单上的所有控件
List<Button> buttonsList = new List<Button>();
foreach (var control in Controls)
{
if (control is Button bt)
{
. buttonsList.Add(bt);
}
}
3-遍历buttonList中的所有按钮,并检查约会值是否等于button.Text
foreach (var bt in buttonsList)
{
foreach (appointment in Appointments) // appointments is fetch appointments from database
{
if (bt.Text = appointment )
{
bt.Enabled = false;
}
}
}
希望这会有所帮助!
答案 1 :(得分:0)
您应使用ajax请求。页面加载事件清除。 aspx页面每5分钟插入一次ajax请求。
Ajax请求获取今天的约会,如果使用了小时,则jquery选择器选择按钮元素并禁用
答案 2 :(得分:0)
循环不正确。
foreach (var btn in buttons)
cmd.CommandText = "select * from clientOrder where TodayDateToCompare='" + lblTodayDate.Text + " and service_time='" + btn.Text + "'";
cmd.Connection = con;
SqlDataReader rd1 = cmd.ExecuteReader();
if (rd1.HasRows)
{
foreach (var btn in buttons)
{
btn.Enabled = false;
btn.BackColor = System.Drawing.Color.Red;
}
con.Close();
}
如果我理解正确,它应该像下面这样:
foreach (var btn in buttons)
{
cmd.CommandText = "select * from clientOrder where TodayDateToCompare='" + lblTodayDate.Text + " and service_time='" + btn.Text + "'";
cmd.Connection = con;
SqlDataReader rd1 = cmd.ExecuteReader();
if (rd1.HasRows)
{
btn.Enabled = false;
btn.BackColor = System.Drawing.Color.Red;
}
}
con.close();
另外,它应该使用“ using”来确保关闭。