【问题标题】:Read-only DataGridView with Copy/Paste-Function?具有复制/粘贴功能的只读 DataGridView?
【发布时间】:2012-10-09 10:29:29
【问题描述】:

我正在开发一个 winform 应用程序,我使用 Datagridview 来显示记录。

现在我要求单元格内容应该是只读的,但同时我希望最终用户可以将单元格内容复制到剪贴板而不是对其进行编辑。

如果您有任何解决方案,请提出建议。

【问题讨论】:

    标签: c# .net winforms datagridview


    【解决方案1】:
    DataGridView.ReadOnly = True;   
    DataGridView.SelectionMode = DataGridViewSelectionMode.CellSelect;
    

    然后用户可以从单元格中选择数据(字符串)并 CTRL+V 将其放入剪贴板

    【讨论】:

    • 很好的答案!我最喜欢这个解决方案。看起来默认的 SelectionMode 值 (RowHeaderSelect) 可以正常工作,因此您可以根据需要跳过第二行。将其设置为 FullRowSelect 之类的东西不会那么好用;)
    【解决方案2】:

    您还可以在 DataGrid 中添加一个 ContextMenu,并添加一个复制和粘贴项,为其添加 Ctrl+V 和 Ctrl+C 快捷键

    然后你处理他们的事件。如果需要,您可以将菜单设置为 Visible = false,然后右键单击菜单不会显示,但快捷方式仍然有效。

    我个人喜欢添加到 DataGrid 中的触摸右键菜单,但那是您的决定。

    【讨论】:

      【解决方案3】:

      您可以尝试使用此代码 - 基于 DataGridViewCell.OnKeyPress

      链接:http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridviewcell.onkeypress.aspx

      private void DataGridViewCell_KeyPress(KeyPressEventArgs e, int index)
      {
           if ( (e.Key == Key.LeftCtrl || e.Key == Key.RightCtrl) 
                && e.Key == Key.C)
           {
              //You can get your cell based on index
              Clipboard.SetText(.....);
           }
      }
      

      【讨论】:

        【解决方案4】:

        您可以添加到 XAML: ClipboardCopyMode= "IncludeHeader"/"ExcludeHeader"/"NONE"

        【讨论】: