【问题标题】:date availability checker working only once日期可用性检查器只工作一次
【发布时间】:2016-07-20 07:15:34
【问题描述】:

我在这里遇到的问题是,代码实际上可以工作,但它只能工作一次。 例如,如果我选择了一个已经在数据库中的日期和时间,它会按预期显示日期不可用,如果我选择一个不在数据库中的日期,它会显示可用的日期。在那之前没问题,但是在这两个标签都显示一次之后,如果我第三次选择不可用的日期,则代码不会再次执行。我的意思是,它只是停留在之前显示的标签上。我怎样才能在这个上做一个循环?

前端代码如下:

<form id="form1" runat="server">
    <asp:ScriptManager ID="scriptmanager1" runat="server">
    </asp:ScriptManager>
    <script type="text/javascript" language="javascript">
        Sys.Application.add_load(jScript);
    </script>
    <div id="dvRecWed" style="display: none">
        <asp:UpdatePanel ID="PnlUsrDetails" runat="server">
            <ContentTemplate>
                <asp:TextBox ID="txtReceptionDate" class="form-control" autocomplete="off" CssClass="datepicker" placeholder="mm/dd/yy" AutoPostBack="true" OnTextChanged="reset_ddl" runat="server"></asp:TextBox>
                <asp:DropDownList AutoPostBack="true" ID="ddlReceptionTime" runat="server" OnSelectedIndexChanged="txtUsername_TextChanged">
                    <asp:ListItem Value="-1">--Select--</asp:ListItem>
                    <asp:ListItem Value="Forenoon">Forenoon</asp:ListItem>
                    <asp:ListItem Value="Afternoon">Afternoon</asp:ListItem>
                    <asp:ListItem Value="FullDay">Full Day</asp:ListItem>
                </asp:DropDownList>
                <div id="checkdate" class="checkdate" runat="server" visible="false">
                    <asp:Image ID="imgstatus" runat="server" Width="17px" Height="17px" />
                    <asp:Label ID="lblStatus" runat="server"></asp:Label>
                </div>
            </ContentTemplate>
        </asp:UpdatePanel>
    </div>
</form>

后端代码如下

protected void txtUsername_TextChanged(object sender, EventArgs e)
{
    if (!string.IsNullOrEmpty(ddlReceptionTime.Text))
    {
        string connString = ConfigurationManager.ConnectionStrings["MandapamDatabase"].ConnectionString;
        OleDbConnection connection = new OleDbConnection(connString);
        // SqlCommand cmd = new SqlCommand("select * from UserInformation where UserName=@Name", con);
        string selectQuery = "SELECT FunctionTime FROM function WHERE FunctionDate=@FunctionDate AND FunctionTime='FullDay'";
        connection.Open();
        OleDbCommand command = new OleDbCommand(selectQuery, connection);
        command.Connection = connection;
        command.CommandText = selectQuery;
        command.CommandType = CommandType.Text;
        command.Parameters.AddWithValue("@FunctionDate", txtReceptionDate.Text);
        command.Parameters.AddWithValue("@FunctionTime", ddlReceptionTime.Text);
        OleDbDataReader dr = command.ExecuteReader();
        if (dr.HasRows)
        {
            checkdate.Visible = true;
            imgstatus.ImageUrl = "~/img/cross.png";
            lblStatus.Text = "Date Unavailable";
            lblStatus.ForeColor = System.Drawing.Color.Red;
        }
        else
        {
            checkdate.Visible = true;
            imgstatus.ImageUrl = "~/img/check.png";
            lblStatus.Text = "Date available";
        }
    }

    else if (!string.IsNullOrEmpty(ddlReceptionTime.Text))
    {
        string connString = ConfigurationManager.ConnectionStrings["MandapamDatabase"].ConnectionString;
        OleDbConnection connection = new OleDbConnection(connString);
        // SqlCommand cmd = new SqlCommand("select * from UserInformation where UserName=@Name", con);
        string selectQuery = "SELECT FunctionTime FROM function WHERE FunctionDate=@FunctionDate AND FunctionTime=@FunctionTime";
        connection.Open();
        OleDbCommand command = new OleDbCommand(selectQuery, connection);
        command.Connection = connection;
        command.CommandText = selectQuery;
        command.CommandType = CommandType.Text;
        command.Parameters.AddWithValue("@FunctionDate", txtReceptionDate.Text);
        command.Parameters.AddWithValue("@FunctionTime", ddlReceptionTime.Text);
        OleDbDataReader dr = command.ExecuteReader();
        if (dr.HasRows)
        {
            checkdate.Visible = true;
            imgstatus.ImageUrl = "~/img/cross.png";
            lblStatus.Text = "Date Unavailable";
            lblStatus.ForeColor= System.Drawing.Color.Red;

        }
        else
        {
            checkdate.Visible = true;
            imgstatus.ImageUrl = "~/img/check.png";
            lblStatus.Text = "Date Available";
        }
    }
    else
    {
        checkdate.Visible = false;
    }
}



protected void reset_ddl(object sender, EventArgs e)
{
    ddlReceptionTime.SelectedValue = "-1";
}

【问题讨论】:

  • 点不是群体动物。您可以在适当的地方设置它们。不仅是 3 人一组。
  • 我认为你的帖子有问题,为什么有 2 次相同的代码块?
  • 不,区别在于第二个查询参数。他可以在那里放一个 if 块,但他选择重复整个 shebang。
  • 我如何做 if 块?我是新手。所以我对此不太了解。所以我用我所拥有的一点知识做了我能做的。谢谢。

标签: c# html asp.net ms-access


【解决方案1】:

您的预期行为是什么?

<asp:TextBox ID="txtReceptionDate" class="form-control" autocomplete="off" CssClass="datepicker" placeholder="mm/dd/yy" AutoPostBack="true" OnTextChanged="reset_ddl" runat="server"></asp:TextBox>
<asp:DropDownList AutoPostBack="true" ID="ddlReceptionTime" runat="server" OnSelectedIndexChanged="txtUsername_TextChanged">
    <asp:ListItem Value="-1">--Select--</asp:ListItem>
    <asp:ListItem Value="Forenoon">Forenoon</asp:ListItem>
    <asp:ListItem Value="Afternoon">Afternoon</asp:ListItem>
    <asp:ListItem Value="FullDay">Full Day</asp:ListItem>
</asp:DropDownList>

根据您的代码,您在下拉列表的OnSelectedIndexChanged 事件期间调用txtUsername_TextChanged

这意味着即使您更改日期选择器的日期值,该事件也不会触发。相反,reset_ddl 将在 OnTextChanged 事件期间触发。

我们不知道reset_dll 做了什么。如果您希望检查日期可用性的代码触发,请将其放在日期选择器文本框的 OnTextChanged 事件上,而不是放在下拉列表中。

【讨论】:

  • reset_dll 将下拉列表中加载的值重置为第一个受保护的 void reset_ddl(object sender, EventArgs e) { ddlReceptionTime.SelectedValue = "-1"; }
  • 你的回答也有帮助,因为你说过 reset_dll 会在我更改日期后立即触发 onTextChanged 事件,然后我才能选择与代码混淆的时间,然后我将其删除并清除了文本框和ddl 一旦我得到日期不可用真诚感谢您的帮助
【解决方案2】:

我发现问题实际上出在哪里,代码没有问题,它工作得很好,问题出在我的数据库中

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-29
    • 2020-09-27
    • 2023-03-22
    • 2017-10-31
    • 2017-10-22
    • 1970-01-01
    相关资源
    最近更新 更多