C# DataGridView 上下移动行

方式一 :非绑定数据

//向上调整选择行
        private void btnArrowUp_Click(object sender, EventArgs e)
        {
            // 选择的行号  
            int selectedRowIndex = GetSelectedRowIndex(this.dgvTasks);
            if (selectedRowIndex >= 1)
            {
                // 拷贝选中的行  
                DataGridViewRow newRow = dgvTasks.Rows[selectedRowIndex];
                // 删除选中的行  
                dgvTasks.Rows.Remove(dgvTasks.Rows[selectedRowIndex]);
              
                // 将拷贝的行,插入到选中的上一行位置  
                dgvTasks.Rows.Insert(selectedRowIndex - 1, newRow);
                dgvTasks.ClearSelection();
                 // 选中最初选中的行 
                 dgvTasks.Rows[selectedRowIndex - 1].Selected = true;
            }
        }
        //向下调整选择行
        private void btnArrowDown_Click(object sender, EventArgs e)
        {
            int selectedRowIndex = GetSelectedRowIndex(this.dgvTasks);
            if (selectedRowIndex < dgvTasks.Rows.Count - 1)
            {
                // 拷贝选中的行  
                DataGridViewRow newRow = dgvTasks.Rows[selectedRowIndex];
                // 删除选中的行  
                dgvTasks.Rows.Remove(dgvTasks.Rows[selectedRowIndex]);
                // 将拷贝的行,插入到选中的下一行位置  
                dgvTasks.Rows.Insert(selectedRowIndex + 1, newRow);
                dgvTasks.ClearSelection();
                // 选中最初选中的行  
                dgvTasks.Rows[selectedRowIndex + 1].Selected = true;
              
            }
        }
        // 获取DataGridView中选择的行索引号  
        private int GetSelectedRowIndex(DataGridView dgv)
        {
            if (dgv.Rows.Count == 0)
            {
                return 0;
            }
            foreach (DataGridViewRow row in dgv.Rows)
            {
                if (row.Selected)
                {
                    return row.Index;
                }
            }
            return 0;

        }


方式二 :绑定数据

   //向上调整选择行
        private void btnArrowUp_Click(object sender, EventArgs e)
        {
            int CurrentRowIndex = dgvTasks.CurrentRow.Index;//获取当前单元格行索引
            if (CurrentRowIndex == 0)//当选中行为第一行时,不可再往上移动
            {
                MessageBox.Show("已经是最上层了!", "温馨提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else if (CurrentRowIndex > 0 && Convert.ToInt32(dgvTasks.Rows[CurrentRowIndex].Cells["seqNum"].Value) > 0)//当选中行大于第一行时,可往上移动
            {
                Point pt = dgvTasks.CurrentCellAddress;//获取当前单元格坐标
                dgvTasks.Rows[CurrentRowIndex - 1].Cells["seqNum"].Value = Convert.ToInt32(dgvTasks.CurrentRow.Cells["seqNum"].Value);//将当前行的序号赋给的上一行
                dgvTasks.CurrentRow.Cells["seqNum"].Value = Convert.ToInt32(dgvTasks.CurrentRow.Cells["seqNum"].Value) - 1;//当前行序号-1
                pt.Y -= 1;//当前单元格Y坐标-1,即当前单元格上移一行
                dgvTasks.Sort(dgvTasks.Columns["seqNum"], ListSortDirection.Ascending);//指定排序的列和升序排序
                dgvTasks.CurrentCell = dgvTasks.Rows[pt.Y].Cells[pt.X];//重新指定当前单元格
            }
        }
        //向下调整选择行
        private void btnArrowDown_Click(object sender, EventArgs e)
        {
            int CurrentRowIndex = dgvTasks.CurrentRow.Index;//获取当前单元格行索引
            if (CurrentRowIndex == dgvTasks.Rows.Count - 1)//当选中行为第一行时,不可再往上移动
            {
                MessageBox.Show("已经是最底层了!", "温馨提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else if (CurrentRowIndex < dgvTasks.Rows.Count - 1 && Convert.ToInt32(dgvTasks.Rows[CurrentRowIndex].Cells["seqNum"].Value) < dgvTasks.Rows.Count)//当选中行大于第一行时,可往上移动
            {
                Point pt = dgvTasks.CurrentCellAddress;//获取当前单元格坐标
                dgvTasks.Rows[CurrentRowIndex + 1].Cells["seqNum"].Value = Convert.ToInt32(dgvTasks.CurrentRow.Cells["seqNum"].Value);//将当前行的序号赋给的下一行
                dgvTasks.CurrentRow.Cells["seqNum"].Value = Convert.ToInt32(dgvTasks.CurrentRow.Cells["seqNum"].Value) + 1;//当前行序号+1
                pt.Y += 1;//当前单元格Y坐标+1,即当前单元格下移一行
                dgvTasks.Sort(dgvTasks.Columns["seqNum"], ListSortDirection.Ascending);//指定排序的列和升序排序
                dgvTasks.CurrentCell = dgvTasks.Rows[pt.Y].Cells[pt.X];//重新指定当前单元格
            }
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值