C# DataGridView行位置调换(上移、下移、置顶、置底)

436 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

    //dataGridView1是控件名称
    //向上移动
    private void butUp_Click(object sender, EventArgs e)
    {
       UpDataGridView(dataGridView1);
    }
     //向上移动
    private void butDown_Click(object sender, EventArgs e)
    {
       DownDataGridView(dataGridView1);
    }
    //置顶
    private void butTop_Click(object sender, EventArgs e)
    {
       TopDataGridView(dataGridView1);
    }
    //置底
    private void butBottom_Click(object sender, EventArgs e)
    {
       BottomDataGridView(dataGridView1);
    }
    /// <summary>
    /// 上移
    /// </summary>
    /// <param name="dataGridView"></param>
    public  static void UpDataGridView(DataGridView dataGridView)
    {
        try
        {
            DataGridViewSelectedRowCollection dgvsrc = dataGridView.SelectedRows;//获取选中行的集合
            if (dgvsrc.Count > 0)
            {
                int index = dataGridView.SelectedRows[0].Index;//获取当前选中行的索引
                if (index > 0)//如果该行不是第一行
                {
                    DataGridViewRow dgvr = dataGridView.Rows[index - dgvsrc.Count];//获取选中行的上一行
                    dataGridView.Rows.RemoveAt(index - dgvsrc.Count);//删除原选中行的上一行
                    dataGridView.Rows.Insert((index), dgvr);//将选中行的上一行插入到选中行的后面
                    for (int i = 0; i < dgvsrc.Count; i++)//选中移动后的行
                    {
                        dataGridView.Rows[index - i - 1].Selected = true;
                    }
                }
            }
        }
        catch(Exception ex) 
        {
            MessageBox.Show(ex.ToString());
        }
    }


    /// <summary>
    /// 下移
    /// </summary>
    /// <param name="dataGridView"></param>
    public static void DownDataGridView(DataGridView dataGridView)
    {
        try
        {
            DataGridViewSelectedRowCollection dgvsrc = dataGridView.SelectedRows;//获取选中行的集合
            if (dgvsrc.Count > 0)
            {
                int index = dataGridView.SelectedRows[0].Index;//获取当前选中行的索引
                if (index >= 0 & (dataGridView.RowCount - 1) != index)//如果该行不是最后一行
                {
                    DataGridViewRow dgvr = dataGridView.Rows[index + 1];//获取选中行的下一行
                    dataGridView.Rows.RemoveAt(index + 1);//删除原选中行的上一行
                    dataGridView.Rows.Insert((index + 1 - dgvsrc.Count), dgvr);//将选中行的上一行插入到选中行的后面
                    for (int i = 0; i < dgvsrc.Count; i++)//选中移动后的行
                    {
                        dataGridView.Rows[index + 1 - i].Selected = true;
                    }
                }
            }
        }
        catch(Exception ex) 
        {
            MessageBox.Show(ex.ToString());
        }
    }
    /// <summary>
    /// 置顶
    /// </summary>
    /// <param name="dataGridView"></param>
    public static void TopDataGridView(DataGridView dataGridView)
    {
        try
        {
            DataGridViewSelectedRowCollection dgvsrc = dataGridView.SelectedRows;//获取选中行的集合
            if (dgvsrc.Count > 0)
            {
                int index = dataGridView.SelectedRows[0].Index;//获取当前选中行的索引
                if (index > 0)//如果该行不是第一行
                {
                    DataGridViewRow dgvr = dataGridView.Rows[index];//获取选中行的上一行
                    dataGridView.Rows.RemoveAt(index);//删除原选中行的上一行
                    dataGridView.Rows.Insert(0, dgvr);//将选中行的上一行插入到选中行的后面                       
                    for (int i = 0; i < dataGridView.Rows.Count; i++)//选中移动后的行
                    {
                        if (i != 0)
                        {
                            dataGridView.Rows[i].Selected = false;
                        }
                        else
                        {
                            dataGridView.Rows[i].Selected = true;       
                        }
                    }                 
                }
            }
        }
        catch(Exception ex) 
        {
            MessageBox.Show(ex.ToString());
        }
    }
    /// <summary>
    /// 置底
    /// </summary>
    /// <param name="dataGridView"></param>
    public static void BottomDataGridView(DataGridView dataGridView)
    {
        try
        {
            DataGridViewSelectedRowCollection dgvsrc = dataGridView.SelectedRows;//获取选中行的集合
            if (dgvsrc.Count > 0)
            {
                int index = dataGridView.SelectedRows[0].Index;//获取当前选中行的索引
                if (index < dataGridView.Rows .Count - 1)//如果该行不是第一行
                {
                    DataGridViewRow dgvr = dataGridView.Rows[index];//获取选中行的上一行
                    dataGridView.Rows.RemoveAt(index);//删除原选中行的上一行
                    int nCount = dataGridView.Rows.Count;
                    dataGridView.Rows.Insert(nCount, dgvr);//将选中行的上一行插入到选中行的后面
                    for (int i = 0; i < dataGridView.Rows.Count; i++)//选中移动后的行
                    {
                        if (i != dataGridView.Rows.Count -1)
                        {
                            dataGridView.Rows[i].Selected = false;
                        }
                        else
                        {
                            dataGridView.Rows[i].Selected = true;
                        }
                    }  
                }
            }
        }
        catch(Exception ex) 
        {
            MessageBox.Show(ex.ToString());
        }
    }