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,如需转载请自行联系原作者

目录
相关文章
|
8月前
|
存储 缓存 C#
46.c#:datagridview控件
46.c#:datagridview控件
109 1
|
8月前
Datagridview 显示当前选中行
Datagridview 显示当前选中行
71 0
Datagrid添加右键菜单
Datagrid添加右键菜单
95 0
C#编程-20:DataGridView在HeaderCell中显示行号的方法
C#编程-20:DataGridView在HeaderCell中显示行号的方法
374 0
C#编程-20:DataGridView在HeaderCell中显示行号的方法
C#编程-21:DataGridview清空数据
C#编程-21:DataGridview清空数据
493 0
C#编程-23:删除datagridview中选中的多行
C#编程-23:删除datagridview中选中的多行
275 0
|
C#
C# DataGridview控件自动下拉到最后一行
有时候使用DataGridView难免会在最后插入一条数据,如果插入的数据超过滚动条显示的行数,那么默认情况下不会显示到最后一行。增加以下代码一直将滚动条拉倒最低。 this.dataGridView1.
2715 0