2016-12-16 3 views
1

사용자가 관련이없는 데이터를 입력하지 못하도록하는 형식/마스크를 셀에 만들어야합니다.DataGridView 셀에서 형식 마스크를 만드는 방법은 무엇입니까?

열 셀에 요일 값이없는 "MM/YYYY"과 같은 날짜 값이 들어 있습니다.

dataGridView1.Columns[0].DefaultCellStyle.Format = "##/####" // || dd/yyyy 

은 또한, 나는 DataGridView의 속성에 가서 거기에서 Format을 정의하려고 :

는 나는이 정의하지만 성공하지를 만들기 위해 다음과 같은 노력했다.

+0

문제를 해결할 수 있었습니까? – OhBeWise

답변

1

is a valid approach의 서식 지정에 사용하는 방법입니다. 여기에 몇 가지 문제가있을 수 있습니다. 확인하십시오 :

  1. 기본 데이터 유형 DateTime하지 유형 string이다. string 형식은 예상대로 형식을 적용하지 않습니다. (아래 예제의 1 및 2 열을 참조하십시오.)
  2. 개별 DataGridViewTextBoxCell.Style.Format은 원하는 형식과 다른 것으로 설정되어 있지 않습니다. 이렇게하면 열 서식이 무시됩니다. (. 참조 아래 예제에서 3 열)

예는 출력에서 ​​볼 수 있듯이

this.dataGridView1.ColumnCount = 4; 
this.dataGridView1.RowCount = 1; 
this.dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells; 

DateTime date = DateTime.Now; 

this.dataGridView1[0, 0].Value = date; 
this.dataGridView1[1, 0].Value = date.ToString(); 
this.dataGridView1[2, 0].Value = date.ToString("MM/yyyy"); 
this.dataGridView1[3, 0].Value = date; 

this.dataGridView1[3, 0].Style.Format = "MM/yyyy"; 

this.dataGridView1.Columns[0].DefaultCellStyle.Format = "dd/yyyy"; 
this.dataGridView1.Columns[1].DefaultCellStyle.Format = "dd/yyyy"; 
this.dataGridView1.Columns[2].DefaultCellStyle.Format = "dd/yyyy"; 
this.dataGridView1.Columns[3].DefaultCellStyle.Format = "dd/yyyy"; 

Cols output: 16/2016, 12/16/2016 8:52:17 AM, 12/2016, 12/2016

:

  1. Columns[0]에는 DateTime이 포함되어 있고 올바르게 형식은 "dd/yyyy"입니다.
  2. Columns[1]에는 string이 포함되어 있으며 "dd/yyyy"으로 다시 포맷 할 수 없습니다.
  3. Columns[2]의 형식이 string이고 "dd/yyyy"으로 다시 포맷 할 수 없습니다.
  4. Columns[3]에는 DateTime이 포함되어 있으며 형식은 "MM/yyyy"의 셀 형식으로 재정의됩니다.

그냥 DateTime 객체가 아니라 어떤 string 표현을 사용하여 셀 값을 설정,이 문제를 해결하려면.일부 외부 소스로부터 데이터를 얻고있는 경우

과 이미 유형 string, 당신이 그것을 Parse하지만주의 할 수의 DateTime 개체의 누락 된 부분이 디폴트 될 것입니다 아무것도 거기에 정말 당신은 할 수 없습니다

DateTime date = DateTime.Parse("10/2016"); 
Console.WriteLine("Output: {0}", date.ToString()); 

// Output: 10/1/2016 12:00:00 AM 

검증

: 원래의 전체 데이터를하지 않고 그것에 대해 할 사용자 입력의 유효성을 검사 (및 편집에 서식 잃고) 당신의 주요 관심사 인 경우 691,363,210

는 잘못된 편집을 취소 확인을 위해 다음의 방법을 고려하십시오

private void DataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) 
{ 
    DateTime parsed; 
    if (!DateTime.TryParse(e.FormattedValue.ToString(), out parsed)) 
    { 
     this.dataGridView1.CancelEdit(); 
    } 
} 

DataGridView.CellFormatting 이벤트 핸들러를 사용하여 형식을 다시 적용하기위한 this answer와 결합. (이는 데이터 유형이 string이 아닌지 확인해야 할 필요성을 무효화하지만 이벤트가 자주 발생하므로 비용이 많이 듭니다.)

관련 문제