最近在做一个需求的时候,需要在dataGridView的最后两行添加一个平均值、总计的行,这两行不能参与排序的。现在的dataGridView其实默认最后一行不参加排序的,但是现在我是最后两行不参与排序,因此需要自己动手解决。类似的,以下解决方案可以让任意一行不参与排序。
首先建立一个winform程序,放入控件dataGridView,然后建立四个列,这里需要将排序设置为NotSorttable,如图所示:
这里主要的原理是这样:刚开始加载的时候,先将需要排序的数据加载到dataGridView中,排序主要靠代码实现,不再试直接修改属性实现。因此需要一个一个排序的标志,sortSign,让其true时进行正序排列,false时进行倒序排列。然后加载完排序的数据,再加载不需要进行排序的数据,并进行相关的计算。点击列头,触发DataGridView1_ColumnHeaderMouseClick事件,然后获取到列的序号,根据列的序号对某一列进行排序。代码实现如下:
namespace WinfromSortTest
{
public partial class Form1 : Form
{
//排序标志
private bool sortSign = true;
//列序号
private int columnIndex = 0;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
ShowData();
}
/// <summary>
/// 给dataGridView添加初始的数据
/// </summary>
private void ShowData()
{
this.dataGridView1.RowCount = 5;
for (int i = 0;i < 4;i++)
{
this.dataGridView1.Rows[i].Cells["Column1"].Value = i;
this.dataGridView1.Rows[i].Cells["Column2"].Value = i+1;
this.dataGridView1.Rows[i].Cells["Column3"].Value = i+2;
this.dataGridView1.Rows[i].Cells["Column4"].Value = i+3;
}
//排序
if(sortSign)
{
this.dataGridView1.Sort(dataGridView1.Columns[columnIndex], ListSortDirection.Ascending);
}
else
{
this.dataGridView1.Sort(dataGridView1.Columns[columnIndex], ListSortDirection.Descending);
}
//排序完成后进行平均值和合计两行数据的添加,这样,其就不会进行排序了
SumAndAvg();
}
/// <summary>
/// 点击列标题触发的事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void DataGridView1_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
sortSign = !sortSign;
columnIndex = int.Parse(e.ColumnIndex.ToString());
ShowData();
this.dataGridView1.ClearSelection();
}
/// <summary>
/// 平均值和合计两列数据的添加
/// </summary>
private void SumAndAvg()
{
this.dataGridView1.RowCount = 6;
this.dataGridView1.Rows[5].Cells["Column1"].Value = "合计";
double column2Sum = 0;
double column3Sum = 0;
double column4Sum = 0;
for(int i = 0;i < 4; i++)
{
column2Sum += double.Parse(this.dataGridView1.Rows[i].Cells["Column2"].Value.ToString());
column3Sum += double.Parse(this.dataGridView1.Rows[i].Cells["Column3"].Value.ToString());
column4Sum += double.Parse(this.dataGridView1.Rows[i].Cells["Column4"].Value.ToString());
}
this.dataGridView1.Rows[5].Cells["Column2"].Value = column2Sum;
this.dataGridView1.Rows[5].Cells["Column3"].Value = column3Sum;
this.dataGridView1.Rows[5].Cells["Column4"].Value = column4Sum;
this.dataGridView1.Rows[4].Cells["Column1"].Value = "平均值";
this.dataGridView1.Rows[4].Cells["Column2"].Value = Math.Round(column2Sum / 4,2,MidpointRounding.AwayFromZero);
this.dataGridView1.Rows[4].Cells["Column3"].Value = Math.Round(column3Sum / 4, 2, MidpointRounding.AwayFromZero);
this.dataGridView1.Rows[4].Cells["Column4"].Value = Math.Round(column4Sum / 4, 2, MidpointRounding.AwayFromZero);
}
}
}
以下是运行结果,点击列头进行排序:
下载资源链接:https://download.csdn.net/download/qq_41061437/12029527
没有积分的给我留言,留下邮箱,我私发。