我有一个包含3列的datagridview。但是我没有将数据源绑定到datagridview。 它有三列。
我可以在datagridview中编辑EmpName。
我想在编辑一行后对datagridview中的内容进行排序。
我想首先按EmpName排序,然后按InTime排序。 时间是AM,PM时间格式(例如:下午2:00)。
我只能按一列排序数据。 我用了,
dgvSchedule.Sort(dgvSchedule.Columns[0],ListSortDirection.Ascending);
但是如何按多列排序。特别是当时间是AM PM格式时。 请帮帮我。
提前致谢。
答案 0 :(得分:1)
以某种方式实现IComparer
:
private class CustomComparer : IComparer
{
private static int SortOrder = 1;
public CustomComparer(SortOrder sortOrder)
{
SortOrder = sortOrder == SortOrder.Ascending ? 1 : -1;
}
public int Compare(object x, object y)
{
DataGridViewRow row1 = (DataGridViewRow)x;
DataGridViewRow row2 = (DataGridViewRow)y;
int result = row1.Cells["EmpName"].Value.ToString().CompareTo(
row2.Cells["EmpName"].Value.ToString());
if ( result == 0 )
{
result = DateTime.ParseExact(
row1.Cells["InTime"].Value.ToString(),
"h:mm tt",
CultureInfo.InvariantCulture).TimeOfDay
.CompareTo(
DateTime.ParseExact(
row2.Cells["InTime"].Value.ToString(),
"h:mm tt",
CultureInfo.InvariantCulture).TimeOfDay);
}
return result * SortOrder;
}
用法是:
dgvSchedule.Sort(new CustomComparer(ListSortDirection.Ascending));