Строка скопировать/вставить функциональность в DataGridview (приложение Windows)

Я работаю над приложением Windows C# и хотел бы скопировать строку в DataGridView и вставить его в новую строку. Как я могу достигнуть этого? Я использую платформу .NET 3.5.

Можно ли предоставить мне некоторые идеи или некоторый код, который указал бы, как я мог достигнуть этого?

9
задан Dan Cundy 3 April 2015 в 09:19
поделиться

2 ответа

Класс Datagridviewrow имеет метод .CLONE, который будет клонировать текущую строку, которая она содержит.

посмотреть здесь для получения дополнительной информации

2
ответ дан 4 December 2019 в 21:49
поделиться

Я нашел пост , который содержит код для вставки значений из буфера обмена в DataGridView.

Я поглотил, как вставить DataGridView в C # из буфера обмена информация, скопированная из Excel и не найти полный ответ. Собрал пару нити с форумов и придумали Этот ответ, надеюсь, это сделает Один из них легче. Вам не нужно понять код просто копировать и Вставить

ниже - это немного модифицированная версия. Помимо небольшого рефакторинга, я запрещаю пасту в готовности клетки.

Пример использования:

private void dataGridView1_KeyUp(object sender, KeyEventArgs e)
{
    ClipboardUtils.OnDataGridViewPaste(sender, e);
}

код:

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;

namespace Commons
{
    public class ClipboardUtils
    {
        public static void OnDataGridViewPaste(object grid, KeyEventArgs e)
        {
            if ((e.Shift && e.KeyCode == Keys.Insert) || (e.Control && e.KeyCode == Keys.V))
            {
                PasteTSV((DataGridView)grid);
            }
        }

        public static void PasteTSV(DataGridView grid)
        {
            char[] rowSplitter = { '\r', '\n' };
            char[] columnSplitter = { '\t' };

            // Get the text from clipboard
            IDataObject dataInClipboard = Clipboard.GetDataObject();
            string stringInClipboard = (string)dataInClipboard.GetData(DataFormats.Text);

            // Split it into lines
            string[] rowsInClipboard = stringInClipboard.Split(rowSplitter, StringSplitOptions.RemoveEmptyEntries);

            // Get the row and column of selected cell in grid
            int r = grid.SelectedCells[0].RowIndex;
            int c = grid.SelectedCells[0].ColumnIndex;

            // Add rows into grid to fit clipboard lines
            if (grid.Rows.Count < (r + rowsInClipboard.Length))
            {
                grid.Rows.Add(r + rowsInClipboard.Length - grid.Rows.Count);
            }

            // Loop through the lines, split them into cells and place the values in the corresponding cell.
            for (int iRow = 0; iRow < rowsInClipboard.Length; iRow++)
            {
                // Split row into cell values
                string[] valuesInRow = rowsInClipboard[iRow].Split(columnSplitter);

                // Cycle through cell values
                for (int iCol = 0; iCol < valuesInRow.Length; iCol++)
                {

                    // Assign cell value, only if it within columns of the grid
                    if (grid.ColumnCount - 1 >= c + iCol)
                    {
                        DataGridViewCell cell = grid.Rows[r + iRow].Cells[c + iCol];

                        if (!cell.ReadOnly)
                        {
                            cell.Value = valuesInRow[iCol];
                        }
                    }
                }
            }
        }
    }
}
7
ответ дан 4 December 2019 в 21:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: