我的数据绑定方法的日期错误
本文关键字:日期 错误 方法 数据绑定 我的 | 更新日期: 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;
}
因此,如果输入实际上在今天的日期之后,则将输入转换为今天的日期。