2011-01-27 5 views
-1

mvc - C# - aspx => 테이블에서 날짜를 보여주는 DDL (드롭 다운 목록)이 있는데 DDL은 테이블에 표시된 항목을 필터링하는 데 사용됩니다. 테이블 작동, 필터 작동, 유일하게 못생긴 것은 필터가 날짜가있는 시간을 표시한다는 것입니다 : 02/12/2010 12 : 00 : 00 : 00 : 00AM 또는 그와 비슷한 것으로, 시간을 줄이려고합니다. 그것은 형태의 테이블을 제공하지만 더 나은 방법이 도움이된다면, 나는 다음 시도 : 컨트롤러에서 => string.format : 그게 아니라는 유효한 SQL을 말해 .... ToString ("MM은/dd/yyyy ", n)는 나에게 같은 것을 말하고, 나는 또한 SQL 서버를 취할지도 모른다라고 생각하는 convert (varchar (12), n, 101)을 시도했지만, 그것도 나처럼 포맷을 추가하려고 시도했다. 뷰 파일에서 DDL 키를 사용하고, 예상대로 내가 그 키를 가지고 무엇이든 찾을 수 없다고 말했다.datetime에서 시간을 제거하는 방법

// target date -- this code is from my controller 

    if ((Request.Form["TARGET_DATE"] != null) && Request.Form["TARGET_DATE"] != "") 
    { 
     TargetDate = Request.Form["TARGET_DATE"]; 
     ViewData["TARGET_DATE"] = new SelectList((from n in _db.ACTION_PLANs select n).ToList(), "TARGET_DATE", "TARGET_DATE", TargetDate); 
     predicate = predicate.And(p => p.TARGET_DATE == Convert.ToDateTime(TargetDate)); 
    } 
    else 
    { 
     TargetDate = null; 
     ViewData["TARGET_DATE"] = new SelectList((from n in _db.ACTION_PLANs select n).ToList(), "TARGET_DATE", "TARGET_DATE"); 
    } 

'n'을 'MM/dd/yyyy'를 따르는 형식으로 지정하는 방법은 무엇입니까? 또는이를 수행하는 가장 좋은 방법은 무엇입니까? 또는 내가 뭘 잘못하고 있니? ..... 고마워요.

+0

odb datetime 형식으로 시도해 보셨습니까? "yyyy-mm-ddTHH : mi : ss" – ykatchou

+0

은 어떻게하는지 설명 할 수 있습니다. 감사합니다. – kyle

답변

0

도움 주신 모든 분들께 ... 드디어 내 드롭 다운리스트 (DDL)에 시간을 표시 할 수있는 날짜를 얻을 수있었습니다. 이게 내가 한거야.

 if ((Request.Form["TARGET_DATE"] != null) && Request.Form["TARGET_DATE"] != "") 
    { 
     TargetDate = Request.Form["TARGET_DATE"]; 

     IEnumerable<SelectListItem> tarDate = 
      from n in _db.ACTION_PLANs 
      select new SelectListItem 
      { 
       Selected = (TargetDate == n.TARGET_DATE.Date.ToString()), 
       Text = string.Format("{0:MM/dd/yyyy}", n.TARGET_DATE.Date), 
       Value = n.TARGET_DATE.ToString(), 
      }; 


     ViewData["TARGET_DATE"] = tarDate; 

     predicate = predicate.And(p => p.TARGET_DATE.ToString() == TargetDate); 

나는 이것이 동일한 문제가있는 다른 사람들에게도 도움이되기를 바랍니다.

0

나는 당신이 실제로 얻고있는 데이터 유형을 보지 못하고 있다고 생각합니다. "02/12/2010 12 : 00 : 00 : 00 : 00AM"의 출력은 somethign이 결국 DateTime 데이터 형식을 언 박싱하는 유형의 장면 뒤에서 .ToString()을 호출하는 것처럼 보입니다.

당신이 당신의 설명에 넣어에 제한을 바탕으로,

((DateTime)ViewData["TARGET_DATE"])).ToString("MM/dd/yyyy") 

은 어쩌면 당신은 운이 그 작동 해보십시오. 또는이 일부 과잉 시도 :

DateTime.Parse(ViewData["TARGET_DATE"].ToString()).ToString("MM/dd/yyyy") 

쇠퇴의 길을, 두 예제는 문제를 (즉, 두 번째 예제에 TryParse()를 사용 또는 사용 해결을 시작 할 수 있도록 그냥, 아주 나쁜 코드 인 " 첫 번째 예에서 "as"키워드). 정리 된 버전에서는 null/empty/DBNull.Value 값을 확인하는 것을 포함하여 전체 오류 검사를 사용하십시오.

두 경우 모두 요점은 실제 데이터 형식 (Object?)을 파악한 다음 변환/캐스팅하여 실제로 원하는대로 형식을 지정할 수 있다는 것입니다.

2

SQL과 CLR DateTime 유형 모두 실제로 "신기원"을 기준으로 "틱"수를 포함하는 정수로 저장된다는 점을 이해해야합니다. 따라서 시간은이 단계의 날짜와 불가분의 관계에 있습니다. 날짜와 시간을 나타내는 값은 하루의 틱 수로 간단하게 나눌 수 있습니다. 날짜 만있는 CLR 유형은 없습니다.

문자열로 변환 할 때 시간을 "무시"하려면 DateTime의 ToString() 오버로드를 사용할 수 있습니다. Convert.ToDateTime(TargetDate).ToString("MM/dd/yyyy"); 그러나 p.TARGET_DATE까지 수행하지 않으면 비교가 실패 할 수 있습니다.

+0

p.TARGET_DATE를 문자열 및 형식으로 변환하려고 시도하지만 충돌이 발생하지만 SQL에 대한 toString 변환이 없다고합니다. 이 시도는 => String.Format ("MM/dd/yyyy", (Convert.ToString (p.TARGET_DATE))) == Convert.ToDateTime (TargetDate) .ToString ("MM/dd/yyyy") 거기에 SQL 변환이 다른 할 무엇입니까? – kyle

0

"시간 지우기"는 데이터베이스에서 벗어나 시간 구성 요소를 0 (자정 또는 12 : 00 : 00.000AM)으로 설정합니다.

날짜 만 표시되도록 프레젠테이션 레이어의 형식을 정렬해야합니다.

0

.ToString 메서드는 선택적 다목적 서식 매개 변수를 허용합니다.

출력 문자열에서 시간 구성 요소를 제거하려면 .ToString("MM/dd/yyyy")을 사용할 수 있습니다.

나는 다음과 같은 목표를 acheive 다음 예에서

:

  1. TARGET_DATE 세션 매개 변수의 존재 여부에 따라 TargetDate 속성을 설정합니다.

  2. DateTime의 초기 목록을 생성하고 TARGET_DATE 세션 매개 변수 기반 linq 쿼리의 결과로 채 웁니다.

  3. 새로운 문자열 목록을 만들고 원하는 형식을 적용하여 DateTime 목록을 복사합니다.

  4. 문자열 목록은 드롭 다운 목록의 데이터 소스로 사용하기 위해 다시 예약됩니다.

  5. 변수 predicate을 설정하는 세션 매개 변수 기반 코드 행 TARGET_DATE의 목적이 확실하지 않습니다. 주변 코드가 그것을 필요로 할 경우를 대비하여 그것을 남겼습니다.

    bool IsDateset = (Request.Form["TARGET_DATE"] != null) && Request.Form["TARGET_DATE"] != ""; 
    
    TargetDate = IsDateset ? Request.Form["TARGET_DATE"] : null; 
    
    List<DateTime> TargetDatesAsDateTime = null; 
    
    if (IsDateset) 
    { 
        List<DateTime> TargetDatesAsDateTime = new SelectList((from n in _db.ACTION_PLANs select n).ToList(), "TARGET_DATE", "TARGET_DATE", TargetDate); 
    
        predicate = predicate.And(p => p.TARGET_DATE == Convert.ToDateTime(TargetDate)); // I'm unsure as to the purpose of this line of code. I left it in in case the surrounding code requires it. 
    
    } 
    else 
    { 
        List<DateTime> TargetDatesAsDateTime = new SelectList((from n in _db.ACTION_PLANs select n).ToList(), "TARGET_DATE", "TARGET_DATE"); 
    
    } 
    
    List<string> TargetDateAsString = new List<string>(); 
    
    if(TargetDatesAsDateTime != null || TargetDatesAsDateTime.Count > 0) 
    {   
        foreach(DateTime d in TargetDatesAsDateTime) 
        { 
         string s = d.ToString("dd/MM/yyyy"); 
    
         TargetDateAsString.Add(s); 
    
        } 
    
    } 
    
    ViewData["TARGET_DATE"] = TargetDatesAsString; 
    

    내가 줄이고 환경 설정에 코드를 포맷하는 당신에게 떠날거야 :

코드

다음 수정 된 코드를 사용하십시오 제공된 코드를 편집 데 .

관련 문제