根据条件禁用按钮

时间:2020-01-01 18:50:32

标签: c# asp.net webforms

我有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();
            }
        }

如果有人能帮助解决这个问题,我将不胜感激。

3 个答案:

答案 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”来确保关闭。