asp.net 在使用TextMode“日期”的文本框中同时选择两个日期

lf5gs5x2  于 2023-01-22  发布在  .NET
关注(0)|答案(1)|浏览(169)

我有一个文本框,用于过滤网格视图上显示的数据。文本框使用TextMode=“Date”,因此当单击时,会显示一个迷你日历,供用户选择日期并相应地加载网格视图。

<asp:TextBox ID="txtTime" runat="server" Width="100px" TextMode="Date" OnTextChanged="txtTime_TextChanged" AutoPostBack="True"></asp:TextBox>

所选日期被放入lblTIME中,该标签在SQL语句中用于过滤网格视图。

SqlCommand cmdSQL = new SqlCommand("SELECT * FROM Schedule.dbo WHERE Date = '" + lblTIME.Text + "'
ORDERY BY ASC");
GvSchedule.DataSource = MyRstP(cmdSQL);
GvSchedule.DataBind();

用户是否可以同时从日历中选择两个日期?更具体地说:我希望用户选择一天,然后自动选择第二天,并发送到一个单独的标签(例如. lblTomorrow)。我相信SQL语句将如下所示:

SqlCommand cmdSQL = new SqlCommand("SELECT * FROM Schedule.dbo WHERE Date = '" + lblTIME.Text + "'
AND '" + lblTomorrow.Text + "' ORDERY BY ASC");
GvSchedule.DataSource = MyRstP(cmdSQL);
GvSchedule.DataBind();
gdrx4gfi

gdrx4gfi1#

好的,所以我会为“容易”只设置第二个日期框为“总是”相同的日期作为第一个框。
因此,用户可以选择任何旧的日期,但第二个框将默认为相同。这样他们就可以轻松地选择一个单一的日期,但如果他们需要改变第二个日期框,至少它将“开始”从同一日期。
所以,我们只需要一点js代码就可以让第二个日期框跟随第一个日期框(但是,用户可以自由地将第二个日期框更改为任何他们想要的日期)。
因此,在网格视图(我们的结果)上方显示此标记。

<div style="float: left">
    <h3>Hotel Bookings</h3>
</div>
<div style="float: left; margin-left: 25px">
    <h4>Start Date</h4>
    <asp:TextBox ID="dtStart" runat="server" TextMode="Date" ClientIDMode="Static"
        onchange="mychange()"></asp:TextBox>
</div>
<script>
    function mychange() {
        dtStart = $('#dtStart').val()
        $('#dtEnd').val(dtStart)
    }
</script>

<div style="float: left; margin-left: 20px">
    <h4>End Date</h4>
    <asp:TextBox ID="dtEnd" runat="server" TextMode="Date"  ClientIDMode="Static" >
    </asp:TextBox>
</div>
<div style="float: left; margin-left: 25px">
    <br />
    <asp:Button ID="cmdSearch" runat="server"
        Text="Search" OnClick="cmdSearch_Click" CssClass="btn" />
</div>
<div style="clear:both"></div>
<br />
<br />

好的,下面是我们的网格视图结果:

<asp:GridView ID="GridView1" runat="server" CssClass="table table-hover"
    DataKeyNames="ID" AutoGenerateColumns="false" Width="60%">
    <Columns>
        <asp:BoundField DataField="FirstName" HeaderText="FirstName" />
        <asp:BoundField DataField="LastName" HeaderText="Last Name" />
        <asp:BoundField DataField="HotelName" HeaderText="Hotel Name" />
        <asp:BoundField DataField="City" HeaderText="City" />
        <asp:BoundField DataField="Province" HeaderText="Province" />
        <asp:BoundField DataField="Description" HeaderText="Description" />
        <asp:BoundField DataField="BookingDate" HeaderText="Booking Date"
            ItemStyle-Width="110px" DataFormatString="{0:MM/dd/yyyy}" />
    </Columns>
</asp:GridView>

现在我们所需要的是“搜索”按钮的代码,这样说:

protected void cmdSearch_Click(object sender, EventArgs e)
{
    String strSQL 
        = @"SELECT * FROM tblHotelsA 
            WHERE BookingDate BETWEEN @dtStart AND @dtEnd
            ORDER BY HotelName";

    SqlCommand cmdSQL = new SqlCommand(strSQL);
    cmdSQL.Parameters.Add("@dtStart", SqlDbType.Date).Value = dtStart.Text;
    cmdSQL.Parameters.Add("@dtEnd", SqlDbType.Date).Value = dtEnd.Text;

    GridView1.DataSource = MyRstP(cmdSQL);
    GridView1.DataBind();

}

DataTable MyRstP(SqlCommand cmdSQL)
{
    DataTable rstData = new DataTable();
    using (SqlConnection conn = new SqlConnection(Properties.Settings.Default.TEST4))
    {
        using (cmdSQL)
        {
            cmdSQL.Connection = conn;
            conn.Open();
            rstData.Load(cmdSQL.ExecuteReader());
        }
    }
    return rstData;
}

现在我们得到/看到这个:

相关问题