zoukankan      html  css  js  c++  java
  • C#实现WinForm下DataGridView控件的拷贝和粘贴

       DataGridView控件应该是数据库应用系统最常用的控件之一,其方便性不言而喻的。往往用户在使用过程中会提出"从DataGridView空间 中拷贝数据或是向某个DataGridView控件粘贴数据"的要求,下面用我的一种方法来实现这个要求,希望大家能提出更好的办法来。注意:粘贴这个方 法只用与从Excel或是Word的表格向DataGridView控件粘贴数据,其它的暂时没有测试过。


    【从DataGridView控件拷贝数据】
    方法比较简单,控件已经为我们提供了剪贴板环境,调用即可,代码如下:
    以上代码在DataGridView控件上键入”Ctrl+C”时就可以执行COPY;

            public void DataGridViewEnableCopy ( DataGridView p_Data )
            {
                 Clipboard.SetData( DataFormats.Text, p_Data.GetClipboardContent() );
            }

      

    【向DataGridView控件粘贴数据】
    这个过程会比上面的复杂,思路:从剪贴板环境中获取已复制内容,假定都是表格数据,因此先分成若干行,然后每行在分成若干字段,最后执行DataGridView.Row.Add()方法来添加记录。代码如下:

            public void DataGirdViewCellPaste ( DataGridView p_Data )
            {
                try
                {
                    // 获取剪切板的内容,并按行分割
                    string pasteText = Clipboard.GetText();
                    if ( string.IsNullOrEmpty( pasteText ) )
                        return;
                    string [ ] lines = pasteText.Split( new char [ ] { ' ', ' ' } );
                    foreach ( string line in lines )
                    {
                        if ( string.IsNullOrEmpty( line.Trim() ) )
                            continue;
                        // 按 Tab 分割数据
                        string [ ] vals = line.Split( ' ' );
                        p_Data.Rows.Add( vals );
                    }
                }
                catch
                {
                    // 不处理
                }
            }

    下面一个问题是何时调用如上代码,可以为DataGridView创建一个右键菜单来实现,这里我展示一个通过判断键入”Ctrl+V”时来调用。代码如下:

              public void DataGridViewEnablePaste ( DataGridView p_Data )
              {
                   if ( p_Data == null )
                       return;
                   p_Data.KeyDown += new KeyEventHandler( p_Data_KeyDown );
              }

              public void p_Data_KeyDown ( object sender, KeyEventArgs e )
              {
                  if ( Control.ModifierKeys == Keys.Control && e.KeyCode == Keys.V )
                  {
                       if ( sender != null && sender.GetType() == typeof( DataGridView ) )
                          // 调用上面的粘贴代码
                       DataGirdViewCellPaste( ( DataGridView ) sender );
                  }
               }

  • 相关阅读:
    递归函数及Java范例
    笔记本的硬盘坏了
    “References to generic type List should be parameterized”
    配置管理软件(configuration management software)介绍
    WinCE文件目录定制及内存调整
    使用Silverlight for Embedded开发绚丽的界面(3)
    wince国际化语言支持
    Eclipse IDE for Java EE Developers 与Eclipse Classic 区别
    WinCE Heartbeat Message的实现
    使用Silverlight for Embedded开发绚丽的界面(2)
  • 原文地址:https://www.cnblogs.com/singov/p/9529260.html
Copyright © 2011-2022 走看看