DataGridView排序

功能说明:

实现DataGridView按Row排序

Demo 测试统计不良项自动排序

1、总数、OK、NG、良率排在在前面

2、其他不良项按个数进行排序,如下图

DataGridView排序_第1张图片

那么 开始我们的正文

1、首先实现一个接口

    public class RowTagNoCompare : System.Collections.IComparer
    {
        #region IComparer 成员  

        public int Compare(object a, object b)
        {
            int a1 = 0, a2 = 0;
            if ((a as DataGridViewRow).Tag != null)
            {
                a1 = (int)(a as DataGridViewRow).Tag;
            }

            if ((b as DataGridViewRow).Tag != null)
            {
                a2 = (int)(b as DataGridViewRow).Tag;
            }
            return a2 - a1;
        }

        #endregion
    }

说明:C#的每一个类都有个Tag属性,这里我们就用这个Tag实现,数据转换前我们只需要知道自己放进来的是什么类型就行了

2、主程序添加一些变量

        public const string TotalText = "总数";
        public const string NGText = "NG";
        public const string OKText = "OK";
        public const string PercentText = "良率";
        public Dictionary S3T = new Dictionary();

3、我们使用一个定时器去不断刷新DataGridView

dgvstatistics.Rows.Clear();
            foreach (var a in S3T)
            {
                DataGridViewRow row = new DataGridViewRow();
                row.CreateCells(dgvstatistics);

                row.Cells[0].Value = a.Key;
                if (string.Compare(a.Key, TotalText, true) == 0)
                {
                    row.Tag = int.MaxValue;
                    row.Cells[1].Style.Font = new System.Drawing.Font("微软雅黑", 9F, FontStyle.Bold);
                }
                else if (string.Compare(a.Key, OKText, true) == 0)
                {
                    row.Tag = int.MaxValue - 1;
                    row.Cells[1].Style.Font = new System.Drawing.Font("微软雅黑", 9F, FontStyle.Bold);
                }
                else if (string.Compare(a.Key, NGText, true) == 0)
                {
                    row.Tag = int.MaxValue - 2;
                    row.Cells[1].Style.ForeColor = Color.Red;
                    row.Cells[1].Style.Font = new System.Drawing.Font("微软雅黑", 9F, FontStyle.Bold);
                }
                else if (string.Compare(a.Key, PercentText, true) == 0)
                {
                    row.Tag = int.MaxValue - 3;
                }
                else
                {
                    row.Tag = Convert.ToInt32(a.Value);
                }
                row.Cells[1].Value = a.Value;

                dgvstatistics.Rows.Add(row);

                dgvstatistics.Sort(new RowTagNoCompare());
            }

4、两个按钮是用于添加Ok和Ng,Ng则是可以自定义项,会自动统计

        private void button1_Click(object sender, EventArgs e)
        {
            Set3TItem(OKText);
        }

        private void button3_Click(object sender, EventArgs e)
        {
            Set3TItem(textBox1.Text);
        }

public void Set3TItem(string item) 方法自己实现一下

懒人链接

源码下载

你可能感兴趣的:(C#开发技巧)