DataGridView 剪下板的操作
阿新 • • 發佈:2018-12-31
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
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++; }