将 DataGridView 列移至右侧

问题描述 投票:0回答:1

我为 DataGridView 创建了一个上下文菜单,用于操作各种不合格的制表符分隔文件中的数据。 (旧的金融东西)

我需要的功能之一是将所有列移至右侧。

我试图理解 .Insert、.Add 和 .Clone 但无济于事,因为共享者远远高于我作为编码员。

请看一下这个并给出一些改进的想法,因为对于长文件,暂停是痛苦的。

        private void dgv_MoveColumnRight(DataGridView dgv, int cIndex)
        {
            dgv.ColumnCount = dgv.ColumnCount + 1;
            int cCount = dgv.ColumnCount - 2;
            if (dgv.RowCount <= 1) { return; }
            while (cCount >= cIndex)
            {
                dgv_CopyColumn(dgv, cCount);//showMe.Comment = "From: " + n1.ToString();
                dgv_PasteColumn(dgv, cCount + 1);
                //dgv.Rows[1].Cells[cCount].Value = "*";
                cCount--;
                Application.DoEvents();
            }
            for (int n = 0; n < dgv.RowCount; n++)
            {
                dgv.Rows[n].Cells[cIndex].Value = " ";
            }
        }

        List<string> colData = new List<string>();
        private void dgv_CopyColumn(DataGridView dgv, int cIndex)   
        {
            colData.Clear();
            for (int n = 0; n < dgvStatement.RowCount; n++)
            {
                if(dgv.Rows[n].Cells[cIndex].Value != null)
                {
                    colData.Add(dgv.Rows[n].Cells[cIndex].Value.ToString());
                }
                else
                {
                    colData.Add(" ");
                }
                showMe.Comment = n.ToString() + "\t" + colData[n];
            }
        }

        private void dgv_PasteColumn(DataGridView dgv, int cIndex)  
        {
            if (colData.Count == 0) { return; }
            for (int n = 0; n < dgvStatement.RowCount; n++)
            {
                dgv.Rows[n].Cells[cIndex].Value = colData[n];
            }
        }

最终代码将传递列表而不是将其公开。

谢谢

c# datagridview visual-studio-2019
1个回答
0
投票

您是否尝试过在重新绘制时不更新网格?...在此示例中,您还可以通过创建新列、对其位置进行排序并清理“旧”列来进行改进

private void dgv_MoveColumnRight(DataGridView dgv, int cIndex)   {
    ....


    // Suspend visual refresh of the DataGridView
    dgv.SuspendLayout();

    //Create new column last
    dgv.Columns.Add(new DataGridViewTextBoxColumn());

    // Move columns
    for (int colIndex = dgv.ColumnCount - 2; colIndex >= cIndex; colIndex--)
    {
        MoveColumnData(dgv, colIndex, colIndex + 1);
    }

    // Clean "old" column
    for (int rowIndex = 0; rowIndex < dgv.RowCount; rowIndex++)
    {
        dgv.Rows[rowIndex].Cells[cIndex].Value = null;
    }

    // Perform DataGridView Visual Update
    dgv.ResumeLayout();
}

private void MoveColumnData(DataGridView dgv, int fromIndex, int toIndex)
{
    for (int rowIndex = 0; rowIndex < dgv.RowCount; rowIndex++)
    {
        dgv.Rows[rowIndex].Cells[toIndex].Value = dgv.Rows[rowIndex].Cells[fromIndex].Value;
    }
}

祝你好运

© www.soinside.com 2019 - 2024. All rights reserved.