2017-12-10 125 views
0

datagridviewから列ヘッダーを含むセルをコピーしたいとします。 (行ヘッダーではありません)。DataGridviewのヘッダー付きセルをコピーする

私はこれを試してみましたが、私は例外を取得:

if (dataGridView1.GetCellCount(DataGridViewElementStates.Selected) > 0) 
{ 
    foreach (DataGridViewColumn c in dataGridView1.Columns) 
    { 
     c.SortMode = DataGridViewColumnSortMode.NotSortable; 
    } 

    dataGridView1.SelectionMode = DataGridviewSelectionMode.ColumnHeaderSelect;     //only the column headers will be copied 
    dataGridView1.ClipboardCopyMode = DataGridViewClipboardCopyMode.EnableWithAutoHeaderText; //.EnableWithAutoHeaderText; 
                                   // Add the selection to the clipboard. 
    Clipboard.SetDataObject(dataGridView1.GetClipboardContent()); //Here it goes wrong 
} 

は、これは私が取得例外です。 GetClipbooardのコンテンツは空ですか?

System.ArgumentNullException: 'Value cannot be null. 
Parameter name: data' 

System.ArgumentNullException occurred 
    HResult=0x80004003 
    Message=Value cannot be null. 
Parameter name: data 
    Source=System.Windows.Forms 



StackTrace: 
    at System.Windows.Forms.Clipboard.SetDataObject(Object data, Boolean copy, Int32 retryTimes, Int32 retryDelay) 
    at System.Windows.Forms.Clipboard.SetDataObject(Object data) 
    at Q_ProtoType.FormMain.MenuItemNew_Click(Object sender, EventArgs e) in c:\Data\Programma\Development\VSSource - oefen_new_functions\Q_ProtoType\Q_ProtoType\FormMain.cs:line 895 
    at System.Windows.Forms.MenuItem.OnClick(EventArgs e) 
    at System.Windows.Forms.MenuItem.MenuItemData.Execute() 
    at System.Windows.Forms.Command.Invoke() 
    at System.Windows.Forms.Command.DispatchID(Int32 id) 
    at System.Windows.Forms.Control.WmCommand(Message& m) 
    at System.Windows.Forms.Control.WndProc(Message& m) 
    at System.Windows.Forms.DataGridView.WndProc(Message& m) 
    at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) 
    at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) 
    at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam) 
    at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg) 
    at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData) 
    at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context) 
    at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context) 
    at System.Windows.Forms.Application.Run(Form mainForm) 
    at Q_ProtoType.Program.Main() in c:\Data\Programma\Development\VSSource - oefen_new_functions\Q_ProtoType\Qx_ProtoType\Program.cs:line 42 
+0

例外を表示してから – less

+0

質問を編集して例外を追加しました – Hansvb

+0

例外を追加しましたか?それはどこにある? – Jesus

答えて

2

ColumnHeaderSelectからFullColumnSelectに設定しました。したがって、GetClipboardContentを呼び出すときは、少なくとも1つの列が選択されている必要があります。そうでない場合は、クリップボードのコンテンツとしてnull値が返され、ClipBoard.SetDataObjectArgumentNullExceptionになります。

すべてをエクスポートする場合は、dataGridView1.SelectAll();を使用してすべての列を選択できます。たとえば、最初の列を選択する場合は、dataGridview1.Columns[0].Selected = true;を設定できます。

関連する問題