2009-02-20 3 views
7

이름 레코드 응용 프로그램을 작성 중이며 정보가 SQLite 데이터베이스에 저장되어 있습니다. DATETIME 인 생년월일 열을 제외하고 데이터베이스의 모든 열은 TEXT 유형입니다. SQLite 데이터베이스로 전송 된 원본 Access 데이터베이스는 생년월일에 null을 허용하므로이를 복사 할 때 모든 null을 DateTime.MinValue로 설정합니다.DataGridView에서 DateTime.MinValue 바꾸기

내 응용 프로그램에서

, 출생 칼럼의 날짜과 같이 포맷 :

DataGridViewTextBoxColumn dateOfBirth = new DataGridViewTextBoxColumn(); 
     dateOfBirth.HeaderText = "DOB"; 
     dateOfBirth.DataPropertyName = "DateOfBirth"; 
     dateOfBirth.Width = 75; 
     dateOfBirth.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; 
     dateOfBirth.DefaultCellStyle.Format = "MM/dd/yyyy"; 

내 문제는 생년월일이없는 행이 데이터베이스에 표시 DateTime.MinValue을 가지고 있다는 것입니다 내 2000 년 1 월 1 일로 DataGridView.

01/01/0001을 DataGridView에서 빈 문자열 ("")로 바꾸는 방법을 찾고 있습니다.

누구나 DataGridView의 DateTime.MinValue를 빈 문자열로 바꿀 수있는 아이디어가 있습니까? 감사!

편집 : DateTime을 사용하여 셀 값을 캐스팅하면 작동해야하는 if 문을 사용할 수 있지만 여전히 MinValues를 빈 문자열로 바꾸는 코딩을 파악할 수 없습니다.

+0

: http://stackoverflow.com/a/36492728/909689 –

답변

5

당신은 날짜 시간으로 캐스팅 할 필요가

if ((DateTime)(resultsGrid.CurrentRow.Cells["DateOfBirth"].Value) == DateTime.MinValue) 
      { 
       // Set cell value to "" 
      } 
+0

나는 변경 사항을 추가 위의 코드를 사용하면 if 문을 사용할 수는 있지만 실제로 셀 내용을 변경하는 코드는 파악할 수 없습니다. –

+0

if 셀 값을 설정하는 if 문에서 // ""; 나는이 코드를 작성해야한다고 생각한다. resultsGrid.CurrentRow.Cells [ "DateOfBirth"]. 값 = ""해야한다. –

+0

resultsGrid.CurrentRow.Cells [ "DateOfBirth"]. 값 = "" –

0
if (yourDateOfBirth != null) 
{ 
    Convert.ToDate(yourDateOfBirth) == DateTime.MinValue 
} 
당신이 DateTime 개체로 개체를 캐스팅 할 수
0

:

//create a nullable intermediate variable 
System.DateTime? dtCellValue = resultsGrid.CurrentRow.Cells["DateOfBirth"].Value as System.DateTime?; 

//if this cell has been set to String.Emtpy the cast will fail 
//so ensure the intermediate variable isn't null 
if (dtCellValue.HasValue && dtCellValue == System.DateTime.MinValue) 
//set cell value appropriately 
0
private void resultsGrid_DateFormatting(object sender, System.Windows.Forms.DataGridViewCellFormattingEventArgs e) 
{ 
    if(resultsGrid.Columns[e.ColumnIndex].Name.Equals("DateOfBirth")) 
{ 
    if ((string)resultsGrid.CurrentRow.Cells["DateOfBirth"].Value == DateTime.MinValue.ToString()) 
    { 
     // Set cell value to "" 
    } 
} 

}

또는 당신은 수도 DateTime으로 캐스팅 한 다음 Min과 비교해야합니다. 가치는 있지만 올바른 생각을 갖고있는 것 같습니다.

2

당신이 필요로하는 변환을 달성하는 것이 아주 간단 할 수도 있지만 (훌륭한 답변 앞에서 설명합니다) 데이터베이스의 특정 열에있는 모든 DateTime.MinValue 값을 NULL으로 대체하는 것이 이상적이라고 생각합니다. 이것은이 위치에있는 데이터의 실제 부족을 정확하게 나타냅니다. 현재 데이터베이스에 데이터가 잘못 포함되어 있으며 데이터를 표시하기 위해 사후 처리하려고합니다.

결과적으로 적절한 렌더링을 제공하기 위해 EmptyDataText 또는 NullDisplayText 속성을 사용하여 GridView의 데이터 표시를 처리 할 수 ​​있습니다.

+0

나는 아주 좋다. SQLite로 작업하기 때문에 틀릴 수도 있지만 DateTime은 null이 될 수 없다고 생각했습니다. 할 수 있다면, 그것은 최적의 솔루션이 될 것입니다. 왜냐하면 당신이 옳기 때문에 저는 실제로 잘못된 데이터를 데이터베이스에 저장했습니다. –

+0

불행히도, 나는 SQLite로 일한 적이 없으며 여러분이 아는 것보다 훨씬 적을 수도 있습니다. 그러나 조사 할 가치가 있다고 생각합니다. 문서를보십시오. 그들의 사이트는 SQLite 2에서 모든 것이 유형이 없다고 알려줍니다. SQLite3 - http://www.sqlite.org/datatype3.html – Cerebrus

0

이미 원하는 답변을 얻을 수 있습니다. 하지만 왜 데이터베이스에 NULL을 넣지 않는지 궁금합니다. sqlite3에서 "datetime"은 다소 단순한 문자열입니다. (sqlite3는 모두 형식 바인딩이 아닌 단지 afinity에 관한 것이므로 datetime 열에 특별한 것이 없습니다.) 따라서이 열에 NULL을 삽입하기 만하면됩니다. 당신은 쿼리 할 때 당신이 날짜의 MINVALUE을 할 경우에, 당신은 쉽게 나는 DateTime.MinValue가 표시하는 이유를 발견

select coalesce(your_datetime_column,'01/01/0001') from your_table 
4

같은 쿼리를 실행할 수 있습니다!

셀 서식 섹션에서이 줄

디스플레이에 "01/01/0001"의 MINVALUE 원인 :

dateOfBirth.DefaultCellStyle.Format = "MM/dd/yyyy"; 

을이 라인없이, 내 datagridview에서 출생 필드의 날짜는 비어 있습니다.

Barbaros Alp는 내가 당시에 무엇을하려했는지에 대해 여전히 정확합니다. 모두에게 감사드립니다!

2

nullabe DateTime 대신 DateTime ("DateTime?") 형식을 사용하십시오. - string을 사용하지 마십시오.

예 : 다음

public DateTime? mydate; 

과 :

DGview.Rows.Add(mydate.HasValue ? mydate : null); 
유사 Q & A이 게시물에 게시 된
관련 문제