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 没有提供方法,只能自己实现。
以下,是粘贴时简单的事例代码,将拷贝数据粘贴到以选择单元格开始的区域内。
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
' 当前单元格是否选择的判断
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++;
}
// 当前单元格是否选择的判断
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,如需转载请自行联系原作者