//客户要求 做一个跟Excel 多列排序 排序操作可能会频繁
//注意:我这里设置的0,要排序的字段不能放在dataGridView第一列,可以把自增列作为第一列或者随便添一个隐藏掉
//这里只设置了3列,
private bool[] sort = { true, true, true };
private int[] sorts = { 0, 0, 0 };
private void dataGridView1_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
int px = this.dataGridView1.SortedColumn.Index;
if (sorts[0] == px && sort[0])
{
sort[0] = false;
}
else if (sorts[0] == px && !sort[0])
{
sort[0] = true;
}
if (sorts[1] == px && sort[1])
{
sort[1] = false;
}
else if (sorts[1] == px && !sort[1])
{
sort[1] = true;
}
if (sorts[2] == px && sort[2])
{
sort[2] = false;
}
else if (sorts[2] == px && !sort[2])
{
sort[2] = true;
}
if (sorts[0] != 0 && sorts[1] != 0 && sorts[2] != 0)
{
if (sorts[0] != px && sorts[1] != px && sorts[2] != px)
{
string name = dataGridView1.Columns[sorts[0]].HeaderText.Replace("🔺", "").Replace("🔻", "");
dataGridView1.Columns[sorts[0]].HeaderText = name;
sorts[0] = sorts[1];
sort[0] = sort[1];
sorts[1] = sorts[2];
sort[1] = sort[2];
sorts[2] = px;
sort[2] = false;
}
}
if (sorts[0] == 0)
{
sorts[0] = px;
sort[0] = false;
}
else if (sorts[1] == 0 && px != sorts[0])
{
sorts[1] = px;
sort[1] = false;
}
else if (sorts[2] == 0 && px != sorts[0] && px != sorts[1])
{
sorts[2] = px;
sort[2] = false;
}
string orderby = "";
for (int i = 0; i < sorts.Length; i++)
{
string name = dataGridView1.Columns[sorts[i]].HeaderText.Replace("🔺", "").Replace("🔻", "");
if (sorts[i] > 0)
{
if (!sort[i])
{
orderby += dataGridView1.Columns[sorts[i]].DataPropertyName + " ASC,";
//这里尝试用dataGridView本身去进行排序 要排序的表头箭头是有的 但是排序后是不正确的 排序应该是最后一个点的列排序的结果
//dataGridView1.Columns[sorts[i]].HeaderCell.SortGlyphDirection = System.Windows.Forms.SortOrder.Ascending;
//找不到只设置表头排序箭头方向的方法 只好自己搞一个
dataGridView1.Columns[sorts[i]].HeaderText = "🔺" + name;
}
else
{
orderby += dataGridView1.Columns[sorts[i]].DataPropertyName + " DESC,";
//dataGridView1.Columns[sorts[i]].HeaderCell.SortGlyphDirection = System.Windows.Forms.SortOrder.Descending;
dataGridView1.Columns[sorts[i]].HeaderText = "🔻" + name;
}
}
}
dataTable1.DefaultView.Sort = orderby.TrimEnd(',');
dataTable1 = dataTable1.DefaultView.ToTable();
dataGridView1.DataSource = dataTable1;
}
结果如图:
因篇幅问题不能全部显示,请点此查看更多更全内容