gridControl上移、下移、置顶、置地,对行排序

之前做的一个项目中需要到对gridcontrol中的行进行排序,鼠标选中需要排序的行,然后进行上移下移。寻找资料的过程不太容易,记录下来最终的成果,希望能对有同样需求的小伙伴有帮助。

上效果:(单行和多行移动)

上移:

数据源:

  DataTable dtPostgreSql = new DataTable();
  gridControl1.DataSource = dtPostgreSql;
if (gridView1.SelectedRowsCount < 1)
            {
                MessageBox.Show("未选中任何行");
                return;
            }
            if (gridView1.SelectedRowsCount == 1)
            {
                int selectIndex = this.gridView1.GetDataSourceRowIndex(this.gridView1.FocusedRowHandle);
                if (selectIndex - 1 >= 0)
                {
                    object[] ot = dtPostgreSql.Rows[selectIndex].ItemArray;
                    DataRow dr = dtPostgreSql.Rows[selectIndex];
                    dtPostgreSql.Rows.Remove(dr);
                    DataRow drs = dtPostgreSql.NewRow();
                    drs.ItemArray = ot;
                    dtPostgreSql.Rows.InsertAt(drs, selectIndex - 1);
                    gridView1.FocusedRowHandle = selectIndex - 1;
                    dtPostgreSql.AcceptChanges();
                }
                else
                    MessageBox.Show("已到第一行不能继续上移");
            }
            if (gridView1.SelectedRowsCount > 1)
            {
                int[] index = new int[gridView1.SelectedRowsCount];
                int[] rows = gridView1.GetSelectedRows();
                int j=0;
                if (rows[0] - 1 >= 0)
                {
                    for (int i = rows[0]; i < rows[rows.Length - 1] + 1; i++)
                    {
                        object[] ot = dtPostgreSql.Rows[i].ItemArray;
                        DataRow dr = dtPostgreSql.Rows[i];
                        dtPostgreSql.Rows.Remove(dr);
                        DataRow drs = dtPostgreSql.NewRow();
                        drs.ItemArray = ot;
                        dtPostgreSql.Rows.InsertAt(drs, i - 1);
                        index[j] = i - 1;
                        j++;
                    }
                    gridView1.SelectRows(index[0], index[index.Length - 1]);
                    dtPostgreSql.AcceptChanges();
                }else
                    MessageBox.Show("已到第一行不能继续上移");

            }

下移:

     if (gridView1.SelectedRowsCount < 1)
            {
                MessageBox.Show("未选中任何行");
                return;
            }
            if (gridView1.SelectedRowsCount >= 1)
            {
                int[] index = new int[gridView1.SelectedRowsCount];
                int[] rows = gridView1.GetSelectedRows();
                int j = 0;
                if (rows[rows.Length - 1] <= gridView1.RowCount-2)
                {
                    for (int i = rows[rows.Length - 1]; i > rows[0]- 1; i--)
                    {
                        object[] ot = dtPostgreSql.Rows[i].ItemArray;
                        DataRow dr = dtPostgreSql.Rows[i];
                        dtPostgreSql.Rows.Remove(dr);
                        DataRow drs = dtPostgreSql.NewRow();
                        drs.ItemArray = ot;
                        dtPostgreSql.Rows.InsertAt(drs, i +1);
                        index[j] = i +1;
                        j++;
                    }
                    gridView1.SelectRows(index[0], index[index.Length - 1]);
                    dtPostgreSql.AcceptChanges();
                }
                else
                    MessageBox.Show("已到最后一条记录不能继续下移");

            }

置顶:

if (gridView1.SelectedRowsCount == 1)
            {
                int top = this.gridView1.GetDataSourceRowIndex(this.gridView1.FocusedRowHandle);
                DataRow drOne = this.gridView1.GetDataRow(top);

                dtPostgreSql.Rows.InsertAt(dtPostgreSql.NewRow(), gridView1.TopRowIndex);
                dtPostgreSql.Rows[gridView1.TopRowIndex].ItemArray = drOne.ItemArray;
                drOne.Delete();//删除原来的数据行(该行所在父表中删除)
                dtPostgreSql.AcceptChanges();//提交表所有的更改
                gridView1.MoveFirst();
            }
            if (gridView1.SelectedRowsCount > 1)
            {
                int[] index = new int[gridView1.SelectedRowsCount];
                int[] rows = gridView1.GetSelectedRows();
                int j = 0;
                if (rows[0] - 1 >= 0)
                {
                    for (int i = rows[0]; i < rows[rows.Length - 1] + 1; i++)
                    {
                        object[] ot = dtPostgreSql.Rows[i].ItemArray;
                        DataRow dr = dtPostgreSql.Rows[i];
                        dtPostgreSql.Rows.Remove(dr);
                        DataRow drs = dtPostgreSql.NewRow();
                        drs.ItemArray = ot;
                        dtPostgreSql.Rows.InsertAt(drs,  j);
                        index[j] =  j;
                        j++;
                    }
                    gridView1.SelectRows(index[0], index[index.Length - 1]);
                    dtPostgreSql.AcceptChanges();
                }
                else
                    MessageBox.Show("已到第一行不能继续上移");

            }

置底:

            int bottom = dtPostgreSql.Rows.Count - 1;
            if (gridView1.SelectedRowsCount >= 1)
            {
                int[] index = new int[gridView1.SelectedRowsCount];
                int[] rows = gridView1.GetSelectedRows();
                int j = 0;
                if (rows[rows.Length - 1] <= gridView1.RowCount - 2)
                {
                    for (int i = rows[rows.Length - 1]; i > rows[0] - 1; i--)
                    {
                        object[] ot = dtPostgreSql.Rows[i].ItemArray;
                        DataRow dr = dtPostgreSql.Rows[i];
                        dtPostgreSql.Rows.Remove(dr);
                        DataRow drs = dtPostgreSql.NewRow();
                        drs.ItemArray = ot;
                        dtPostgreSql.Rows.InsertAt(drs, bottom - j);
                        index[j] = bottom - j;
                        j++;
                    }
                    gridView1.SelectRows(index[0], index[index.Length - 1]);
                    dtPostgreSql.AcceptChanges();
                }
                else
                    MessageBox.Show("已到最后一条记录不能继续下移");

            }
发布了44 篇原创文章 · 获赞 4 · 访问量 7958

猜你喜欢

转载自blog.csdn.net/fangyu723/article/details/104971670