当前位置:编程学习 > C#/ASP.NET >>

datagridview最后一行不排序

datagridview最后一行是新增的合计行,想一直留在最后,不要排序,前面的数据可以排序,大侠有解决的办法? --------------------编程问答-------------------- 列排序? 第一列不排序
this.dataGridView1.Columns[0].SortMode = DataGridViewColumnSortMode.NotSortable; --------------------编程问答-------------------- 其他列排序的时候,最后一行还是参加了排序 --------------------编程问答-------------------- #region 定义排序变量
        //泛型
        List<object[]> lastRow = new List<object[]>();
        //列索引
        int colindex = 0;
        //排序方式
        string sort = " desc";
        #endregion

        #region 鼠标点击
        private void d_ProductList_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            //判断行数大于0
            if (e.RowIndex >= 0 || d_ProductList.Rows.Count == 0)
                return;
            //最后一行为0时
            if (lastRow.Count == 0)
            {
                if (sort == " desc")
                    sort = " asc";
                else
                    sort = " desc";
                //当前点击的列
                colindex = e.ColumnIndex;
                //定义最后一行
                int index = d_ProductList.Rows.Count - 1;
                //把datagridview最后一行数据赋值给lastRow
                lastRow.Add(_445188.Class.Common.CreateTable(((DataView)d_ProductList.DataSource)).Rows[index].ItemArray);
                //移除最后一行
                d_ProductList.Rows.Remove(d_ProductList.Rows[d_ProductList.Rows.Count - 1]);
            }
        }
        #endregion   

        #region 排序方法
        private void d_ProductList_Sorted(object sender, EventArgs e)
        {
            //最后一行为0则返回
            if (lastRow.Count == 0)
                return;
            //ForbidSortColumn(d_ProductList,colindex);
            //将datagridview的数据源转换成datatable
            DataTable dt = _445188.Class.Common.CreateTable((DataView)d_ProductList.DataSource);
            DataView dv = dt.DefaultView;
            dv.Sort = dt.Columns[colindex].ColumnName+sort;
            dt = dv.ToTable();
            dt.Rows.Add(lastRow[0]);
            lastRow.Clear();
            //colindex = 0;
            d_ProductList.DataSource = dt.DefaultView;
            if (d_ProductList.Rows.Count > 0)//判断已经有行
            {
                //隐藏第一列
                d_ProductList.Columns[0].Visible = false;
                //给最后一行加背景色
                d_ProductList.Rows[d_ProductList.Rows.Count - 1].DefaultCellStyle.BackColor = Color.Silver;
                for (int i = 0; i < d_ProductList.Rows.Count; i++)
                {
                    d_ProductList.Rows[i].Cells[1].Value = (i + 1).ToString();
                }
            }
        }
        #endregion --------------------编程问答-------------------- 给分吧lz,肯定能用,不能用,QQ找我,398075665 --------------------编程问答-------------------- #region 将对象类型DataView转换成DataTable
        public static System.Data.DataTable CreateTable(DataView obDataView)
        {
            //判断DataView为null
            if (null == obDataView)
            {
                throw new ArgumentNullException("DataView", "Invalid DataView object specified");
            }
            //定义datatable
            System.Data.DataTable obNewDt = obDataView.Table.Clone();
            //定义索引
            int idx = 0;
            //定义长度为DataTable列数的数据
            string[] strColNames = new string[obNewDt.Columns.Count];
            //将DataTable的列添加到数组中
            foreach (DataColumn col in obNewDt.Columns)
            {
                strColNames[idx++] = col.ColumnName;
            }
            //定义非泛型
            System.Collections.IEnumerator viewEnumerator = obDataView.GetEnumerator();
            //循环
            while (viewEnumerator.MoveNext())
            {
                //将非泛型中当前元素转换成DataView
                DataRowView drv = (DataRowView)viewEnumerator.Current;
                //新增行
                DataRow dr = obNewDt.NewRow();
                try
                {
                    //将数组里的元素的值赋给新增行
                    foreach (string strName in strColNames)
                    {
                        dr[strName] = drv[strName];
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
                //将新增行添加到DataTable中
                obNewDt.Rows.Add(dr);
            }
            return obNewDt;
        }
        #endregion
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,