DataGridView 剪切板的操作

DataGridView.ClipboardCopyMode  属性被设定为  DataGridViewClipboardCopyMode.Disable  以外的情况时,「 Ctrl + C   按下的时候,被选择的单元格的内容会拷贝到系统剪切板内。格式有:  Text  UnicodeText Html  CommaSeparatedValue 。可以直接粘贴到  Excel  内。

ClipboardCopyMode 
还可以设定  Header 部分是否拷贝:  EnableAlwaysIncludeHeaderText  拷贝 Header 部分、 EnableWithoutHeaderText  则不拷贝。默认是  EnableWithAutoHeaderText   Header  如果选择了的话,就拷贝。

1
  编程方式实现剪切板的拷贝

Clipboard.SetDataObject(DataGridView1.GetClipboardContent()) 

2) DataGridView 
的数据粘贴

实现剪切板的拷贝比较容易,但是实现  DataGridView  的直接粘贴就比较难了。「 Ctrl + V 」按下进行粘贴时, DataGridView  没有提供方法,只能自己实现。

以下,是粘贴时简单的事例代码,将拷贝数据粘贴到以选择单元格开始的区域内。

[VB.NET]
当前单元格是否选择的判断
If  DataGridView1.CurrentCell  Is   Nothing   Then
    
Return
End   If
Dim  insertRowIndex  As   Integer  = DataGridView1.CurrentCell.RowIndex

获取剪切板的内容,并按行分割
Dim  pasteText  As   String  = Clipboard.GetText()
If   String .IsNullOrEmpty(pasteText)  Then
    
Return
End   If
pasteText = pasteText.Replace(vbCrLf, vbLf)
pasteText = pasteText.Replace(vbCr, vbLf)
pasteText.TrimEnd(
New   Char () {vbLf})
Dim  lines  As   String () = pasteText.Split(vbLf)

Dim  isHeader  As   Boolean  =  True
For   Each  line  As   String   In  lines
    
是否是列头
     If  isHeader  Then
        isHeader = 
False
    
Else
        
 Tab  分割数据
         Dim  vals  As   String () = line.Split(ControlChars.Tab)
        
判断列数是否统一
         If  vals.Length - 1 <> DataGridView1.ColumnCount  Then
            
Throw   New  ApplicationException(" 粘贴的列数不正确。 ")
        
End   If
        
Dim  row  As  DataGridViewRow = DataGridView1.Rows(insertRowIndex)
        
行头设定
        row.HeaderCell.Value = vals(0)
        
单元格内容设定
         Dim  i  As   Integer
        
For  i = 0  To  row.Cells.Count - 1
            row.Cells(i).Value = vals((i + 1))
        
Next  i

        
' DataGridView 的行索引 +1
        insertRowIndex += 1
    
End   If
Next  line

 

[C#]
// 当前单元格是否选择的判断
if  (DataGridView1.CurrentCell ==  null )
    
return ;
int  insertRowIndex = DataGridView1.CurrentCell.RowIndex;

//  获取剪切板的内容,并按行分割
string  pasteText = Clipboard.GetText();
if  ( string .IsNullOrEmpty(pasteText))
    
return ;
pasteText = pasteText.Replace(" ", " ");
pasteText = pasteText.Replace(' ', ' ');
pasteText.TrimEnd(
new   char [] { ' ' });
string [] lines = pasteText.Split(' ');

bool  isHeader =  true ;
foreach  ( string  line  in  lines)
{
    
//  是否是列头
     if  (isHeader)
    {
        isHeader = 
false ;
        
continue ;
    }

    
//   Tab  分割数据
     string [] vals = line.Split(' ');
    
//  判断列数是否统一
     if  (vals.Length - 1 != DataGridView1.ColumnCount)
        
throw   new  ApplicationException(" 粘贴的列数不正确。 ");
    DataGridViewRow row = DataGridView1.Rows[insertRowIndex];
    
//  行头设定
    row.HeaderCell.Value = vals[0];
    
//  单元格内容设定
     for  ( int  i = 0; i < row.Cells.Count; i++)
    {
        row.Cells[i].Value = vals[i + 1];
    }

    
//  DataGridView 的行索引 +1
    insertRowIndex++;
}




本文转自 qianshao 51CTO博客,原文链接:http://blog.51cto.com/qianshao/201789,如需转载请自行联系原作者

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值