【问题标题】:C# Paste clipboard content into DataTableC# 将剪贴板内容粘贴到 DataTable
【发布时间】:2021-11-16 20:17:42
【问题描述】:

由于我找不到将剪贴板文本粘贴到 DataTable 中的好方法,所以我想出了这个方法。希望能节省一些人的时间。

【问题讨论】:

  • 如果您的代码有任何问题,我建议您将其作为问题的一部分发布。
  • 我的目的是与社区分享我想出的工作代码。但我不确定我是否以正确的方式做到了。如果您或有人可以指导我正确的方法,将不胜感激。

标签: c# text datatable clipboard paste


【解决方案1】:
    private DataTable dataTable = new DataTable();

    dataGridView1.DataSource = dataTable;

...

 private void dataGridView1_KeyUp(object sender, KeyEventArgs e)
    {
        if ((e.Shift && e.KeyCode == Keys.Insert) || (e.Control && e.KeyCode == Keys.V))

        {
            pasteClipboardIntoDataTable(true);
        }
    }

    private void pasteClipboardIntoDataTable(Boolean createNewColumnsIfRequired)
    {
        if (!Clipboard.ContainsText())
        {
            Console.WriteLine("Clipboard does not containt any text to paste.");
            return;
        }

        //Uses tab as the default separator, but if there's no tab, use the system's default

        String textSeparator = (Clipboard.GetText().Contains("\t")) ? "\t" : System.Globalization.CultureInfo.CurrentCulture.TextInfo.ListSeparator;

        List<String> clipboardAsList = new List<String>(Clipboard.GetText().Split('\n'));

        List<String[]> cleanLines = clipboardAsList
         .Select(s => s.Replace("\n", "").Replace("\r", "").Split(textSeparator.ToCharArray()))
         .ToList<String[]>()
         ;

        foreach (String[] line in cleanLines)
        {
            if (createNewColumnsIfRequired && dataTable.Columns.Count < line.Length)
            {
                for (int i = dataTable.Columns.Count; i < line.Length; i++)
                {
                    dataTable.Columns.Add();
                }
            }

            DataRow dataRow = dataTable.NewRow();

            //If the clipboard contains too many columns and createNewColumnsIfRequired is false

            if (line.Length > dataRow.ItemArray.Length)
            {
                Console.WriteLine("The clipboard contains the following " + line.Length + " colums: \n\n" + string.Join(", " + Environment.NewLine, line) + ".\n\nBut the Datagrid only contains " + dataRow.ItemArray.Length + " columns.");                    
                return;
            }

            for (int i = 0; i < line.Length; i++)
            {
                dataRow[i] = line[i];
            }

            dataTable.Rows.Add(dataRow);
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-16
    • 1970-01-01
    • 2010-10-18
    • 1970-01-01
    • 1970-01-01
    • 2015-07-24
    • 1970-01-01
    相关资源
    最近更新 更多