我的数据绑定方法的日期错误

本文关键字:日期 错误 方法 数据绑定 我的 | 更新日期: 2023-09-27 18:25:04

我有一个页面,用户可以在其中输入"from date"answers"to date",并根据日期间隔获得一组值。唯一的问题是它不适用于"迄今为止"。当我输入这样的内容:from: 2012-01-01 | to: 2013-07-26时,它工作得很好。但当我尝试这样的东西时:from: 2010-07-04 | to: 2012-01-01在那个日期之后我仍然会得到所有结果(比如2013年)。

我已经使用上面的输入值运行了调试(2010/07/04-2012/01/01)。以下是我的代码以及调试中的相关值:

ASPX

    <asp:TextBox ID="VolumeSearchFromDate" runat="server" CssClass="dateTextBox" />
    <br />
    <asp:TextBox ID="VolumeSearchToDate" runat="server" CssClass="dateTextBox" />
    <br />
    <asp:Button ID="Button2" runat="server" Text="Search" onclick="btnVolumeSearch_Click" ValidationGroup="validate" />
    <br />
    <asp:GridView ID="myGv" runat="server" 
    ShowFooter="True" 
    AutoGenerateColumns="False" AllowSorting="True" DataKeyNames="id" DataSourceID="myObjectDataSource" >
        <Columns>
            //my columns here
        </Columns>
    </asp:GridView>
<asp:ObjectDataSource ID="myObjectDataSource" runat="server" 
        DeleteMethod="myDeleteMethod" SelectMethod="mySelectMethod" 
        TypeName="whereItsAt.sqlDataLayer" UpdateMethod="myUpdateMethod">
        <DeleteParameters>
            <asp:Parameter Name="id" Type="Int32" />
        </DeleteParameters>
        <SelectParameters>
            <asp:Parameter Name="fromDate" Type="DateTime"/>
            <asp:Parameter Name="toDate" Type="DateTime"/>
        </SelectParameters>
        <UpdateParameters>
            <asp:Parameter Name="id" Type="Int32" />
            <asp:Parameter Name="volume" Type="Int32" />
        </UpdateParameters>
    </asp:ObjectDataSource>

代码隐藏(c#)

//dont know why this is here. The person who wrote the code 
//in the first place wrote this and I haven't removed it.
protected void btnVolumeSearch_Click(object sender, EventArgs e) 
{
    gvVolumeListBindData();
}
private void gvVolumeListBindData()
{
    myObjectDataSource.SelectParameters.Remove(myObjectDataSource.SelectParameters["fromDate"]);
    string debugString /* "" */= VolumeSearchFromDate.Text.ToString(); /* 2010-04-07 */
    string debugString2 /* 2012-01-01 */ = debugString /* "" */;
    myObjectDataSource.SelectParameters.Add("fromDate", VolumeSearchFromDate.Text.ToString());
    myObjectDataSource.SelectParameters.Remove(myObjectDataSource.SelectParameters["toDate"]);
    myObjectDataSource.SelectParameters.Add("toDate", VolumeSearchToDate.Text.ToString());
    debugString /* "" */ = VolumeSearchToDate.Text.ToString(); /* 2012-01-01
    debugString2 /* 2012-01-01 */ = debugString; /* "" */
    gvVolumeList.DataBind();
}

检索数据的方法(也是C#)

public static DataTable mySelectMethod(DateTime fromDate /* 2010-07-04 00:00:00 */, DateTime toDate /* 2013-07-26 00:00:00 */)
{
    DateTime minDate = new DateTime(1900,01,01,00,00,00);
    DateTime maxDate = DateTime.Today;
    int result = DateTime.Compare(minDate, fromDate);
    if (result >= 0)
    {
        fromDate = minDate;
    }
    result = DateTime.Compare(maxDate, toDate);
    if (result >= 0)
    {
        toDate = maxDate;
    }
    //set up connection, call stored procedure etc etc etc.
    return table;
}

有人知道这里发生了什么吗?在我看来,我的变量只是不时地随机改变值。

编辑问题是,我只检查fromDate是否太小,toDate是否太大,但我需要检查两者。感谢Parvez Alam和Can Canbek帮助我得出这样的结论:)

我的数据绑定方法的日期错误

更改此行

result = DateTime.Compare(maxDate, toDate);

result = DateTime.Compare(toDate, maxDate);

通过这个链接

http://msdn.microsoft.com/en-us/library/system.datetime.compare.aspx

好的,我们一步一步走;

您有您的minDate值和maxDate值,即今天。

 result = DateTime.Compare(maxDate, toDate);
    if (result >= 0)
    {
        toDate = maxDate;
    }

当您进入此部分时,将今天的日期与toDate变量进行比较,由于今天的日期在toDate值之后,因此返回"1",并将今天的时间分配给toDate值,从而返回今天的日期。

我认为如果你用这个切换代码,它应该可以

 result = DateTime.Compare(maxDate, toDate);
    if (result < 0)
    {
        toDate = maxDate;
    }

因此,如果输入实际上在今天的日期之后,则将输入转换为今天的日期。