DateTime 값의 열이있는 datagridview가 있고 그 중 일부는 null입니다. 해당 열을 기준으로 정렬 할 때까지는 문제가 없습니다. 여기null datetimes로 DataGridView 정렬
DataGridView sorting with nulls in DateTime column
발견 나는 SortCompare 코드를 구현했지만 디버거 아직도 내가있는 try-catch
있어
Object must be of type DateTime.
말, 예외를 던지고 내 Application.Run(new MainForm());
라인 가리키는 내 SortCompare 이벤트 처리기를 사용하면 모든 코드를 성공적으로 실행할 수 있습니다. 이벤트 처리기가 예외가 throw 된 것을 반환하는 경우에만 해당합니다.
이 예외를 어떻게 막을 수 있습니까?
CODE :
은 Visual Studio에서 새로운 C# 윈도우 폼 프로젝트를 열고 Full
dockstyle와 폼에 DataGridView를 던져. Form1.cs
에서 다음 코드로 public Form1()
방법을 대체 :
public Form1()
{
InitializeComponent();
//Create datatable and add a datetime column
DataTable dTable = new DataTable();
DataColumn dColumn = new DataColumn("DateTimes", typeof(DateTime));
dTable.Columns.Add(dColumn);
//Add rows
dTable.Rows.Add(DateTime.Now);
dTable.Rows.Add(DBNull.Value);
//Create a datagridview column and add it to the datagridview
DataGridViewTextBoxColumn dgvColumn = new DataGridViewTextBoxColumn();
dgvColumn.Name = dColumn.ColumnName;
dgvColumn.ValueType = dColumn.DataType;
this.dataGridView1.Columns.Add(dgvColumn);
//Add rows to the datagridview based on datatable data.
foreach (DataRow dRow in dTable.Rows)
{
DataGridViewRow dgvRow = new DataGridViewRow();
dgvRow.CreateCells(this.dataGridView1);
dgvRow.SetValues(dRow.ItemArray);
this.dataGridView1.Rows.Add(dgvRow);
}
//Hook up sortcompare event handler
this.dataGridView1.SortCompare += new DataGridViewSortCompareEventHandler(dataGridView1_SortCompare);
//Style datagridview
this.dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
}
private void dataGridView1_SortCompare(object sender, DataGridViewSortCompareEventArgs e)
{
try
{
if (DBNull.Value.Equals(e.CellValue1) || DBNull.Value.Equals(e.CellValue2))
{
if (DBNull.Value.Equals(e.CellValue1) || e.CellValue1.Equals(null))
{
e.SortResult = 1;
}
else if (DBNull.Value.Equals(e.CellValue2) || e.CellValue2.Equals(null))
{
e.SortResult = -1;
}
}
else
{
e.SortResult = (e.CellValue1 as IComparable).CompareTo(e.CellValue2 as IComparable);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
그런 다음 프로그램을 실행하고 예외를 발생하는 열을 정렬하려고합니다.
코드를 표시하십시오. –
대표 코드로 내 질문을 업데이트했습니다. 감사! – user2320861