2013-07-26 2 views
0

사용자가 "from date"및 "to date"를 입력하고 date-intervall을 기반으로 값 집합을 가져올 수있는 페이지가 있습니다. 유일한 문제는 "현재 날짜"와 함께 작동하지 않는다는 것입니다. 다음과 같이 입력하면 from: 2012-01-01 | to: 2013-07-26 잘됩니다. 그러나 내가 이와 같은 것을 시도 할 때 : from: 2010-07-04 | to: 2012-01-01 나는 그날 이후에도 모든 결과를 얻는다. (2013 년부터).내 databind 메서드의 날짜가 잘못 입력되었습니다.

위의 입력 값 (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과 Canbek에게 감사의 말을 전합니다. :)

답변

1

변경이 줄을

result = DateTime.Compare(maxDate, toDate); 

result = DateTime.Compare(toDate, maxDate); 

에이 링크

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

+0

나는 너무 생각했다. 그러나 내가 할 때, if 문은 입력되지 않고'SqlDateTime overflow '를 얻는다.1/1/1753 12:00:00 AM과 12/31/9999 11:59:59 PM 사이 여야합니다. ' –

+0

두 번째 비교시이 오류가 발생합니다 –

+0

다음 결과를 시도하십시오. = DateTime.Compare (toDate, DateTime.Now); –

1

자, 한 걸음 한걸음 나아가십시오.

귀하는 현재 귀하의 분과 최대 날자 값을 가지고 있습니다. 이 부분에 도착하면

result = DateTime.Compare(maxDate, toDate); 

    if (result >= 0) 
    { 
     toDate = maxDate; 
    } 

, 당신은 TODATE 변수로 오늘 날짜를 비교하고, 오늘 날짜가 TODATE 값 이후이기 때문에이 "1"을 반환하고, 따라서 오늘 날짜를 반환 TODATE 값에 오늘 날짜를 지정합니다.

난 당신이 가진 코드를 전환하는 경우, 그것은

result = DateTime.Compare(maxDate, toDate); 

    if (result < 0) 
    { 
     toDate = maxDate; 
    } 

그래서 입력이 오늘 날짜 이후에 실제로 경우 오늘 날짜로 입력을 설정 작업을한다고 생각합니다.

+0

내가 메릴랜드 대답으로 통과. 그 때문에 베즈 알람, 나는 처음에이 시도 MSDN 문서에서의 모습. 하지만 이렇게하면이 오류가 발생합니다 :'SqlDateTime overflow. 1/1/1753 12:00:00 AM과 12/31/9999 11:59:59 PM 사이 여야합니다. If 문이 입력되지 않기 때문에 –

+0

else 문을 추가하고 원본을 반환해야합니다 toDate 값 –

관련 문제