2017-11-10 18 views
0

私のコピーコマンドにはほとんど問題がありません。私はCtrl + Cキーのショートカットを介してDataGridでそれを使用しています。c#データグリッドから複数の行をコマンドでコピーする方法

これは私の実際の行のコピー方法です。

private void CopyRow(object obj) 
    { 
     var item = obj as System.Windows.Controls.DataGrid; 
     var currentRow = item.SelectedIndex + 1; 
     var cells = item.SelectedCells; 

     if (_entityEnhancedNotifiedTruck != null) 
     { 
      Dictionary<ENotifiedTruckFlags, string> transf = new Dictionary<ENotifiedTruckFlags, string>(); 
      string value = ""; 

      foreach (var e in _entityEnhancedNotifiedTruck.EFlags) 
      { 
       switch (e) 
       { 
        case ENotifiedTruckFlags.CheckRecordHasBreak: 
         value = "Řidič má nařízenou přestávku"; 
         break; 
        case ENotifiedTruckFlags.CheckWeighingOn: 
         value = "Řežim kontrolního vážení"; 
         break; 
        case ENotifiedTruckFlags.NoTaraWeighted: 
         value = "Chybí tárové vážení"; 
         break; 
        case ENotifiedTruckFlags.SPZProblem: 
         value = "Proveďte kontrolu SPZ"; 
         break; 
        case ENotifiedTruckFlags.TimeProblem: 
         value = "Proveďte kontrolu ložné plochy"; 
         break; 
       } 
       transf.Add(e, value); 
      } 

      var myStringBuilder = new StringBuilder(); 
      foreach (KeyValuePair<ENotifiedTruckFlags, string> pair in transf) 
      { 
       myStringBuilder.AppendFormat("{0}", pair.Value); 
       myStringBuilder.Append("," + " "); 
      } 

      DateTime dt = _entityEnhancedNotifiedTruck.ECreationTime; 
      var Date = dt.ToShortDateString(); 
      var Time = dt.ToLongTimeString(); 

      DeliveriesGroup delGroup = _loadingSiteService.GetTruckLoadingDetail(_entityEnhancedNotifiedTruck.RecordID, computerName); 


      var clipboardText = currentRow + "\t" + Date + "\t" + Time + "\t" + _entityEnhancedNotifiedTruck.LicencePlate + "\t" + _entityEnhancedNotifiedTruck.LicencePlateTrailer + "\t" + _entityEnhancedNotifiedTruck.DriverName + "\t" + _entityEnhancedNotifiedTruck.LoadingSite + "\t" + _entityEnhancedNotifiedTruck.State + "\t" + _entityEnhancedNotifiedTruck.ProcessTypeName + "\t" + value; 
      Clipboard.SetText(clipboardText); 

     } 
    } 

私の問題は、このメソッドは、DataGridから1行しかコピーできないということです。ユーザーが複数の行にマウスを伸ばしてCtrl + Cを押すと、すべてではありません。どのようにこれを解決するためのヒント?ありがとう! :)

答えて

0

問題は、あなたのメソッドが直接Clipboard.SetText(clipboardText);を呼び出してクリップボードテキストを設定していることです。

このメソッドはbuilded clipboardTextをstringとして返します。次に、ユーザーが選択した各行に対してこのメ​​ソッドを呼び出すことができます。

そして、あなたはあなたのような何かを行うことができ、すべての行からすべてのclipboardText年代を収集した後:私が思う

List<string> clipboardTextsFromAllRows = new List<string>(); 
// Call your method and save the return values in the list 
string clipboardText = string.Join(Environment.NewLine, clipboardTextsFromAllRows); 
Clipboard.SetText(clipboardText); 
+0

、リストに私は新しいリストに(){currentRowの、などと他の文字列}を使うことができますか? –

関連する問題