2017-02-21 45 views
0

這是我在計算器的第一個問題,我完全新的節目在C#中,所以請多多包涵。我使用WPF創建了一個應用程序,其中我在數據網格中顯示了帶有.rpt擴展名的文件列表。 datagrid包含文件名列表,datagrid中也有一個複選框列。當我點擊一個按鈕時,這些文件會從文件夾瀏覽器動態填充到網格中。當我點擊第二個按鈕時(打印,因爲我需要調用服務來打印選定的文件),我被困在了用於打印這些文件進行打印的部分。入門按鈕選定的報告文件行從WPF的Datagrid點擊

這是代碼片段,我已經試過至今:

public partial class MainWindow : Window 
{ 
    public class ReportFile 
    { 
     public string Path { get; set; } 
     public string FileName { get; set; } 
    } 

    private void Button_Click(object sender, RoutedEventArgs e) 
    { 
     string inputPath = AppDomain.CurrentDomain.BaseDirectory; 

     System.Windows.Forms.FolderBrowserDialog fldDlg = new System.Windows.Forms.FolderBrowserDialog(); 
     fldDlg.SelectedPath = AppDomain.CurrentDomain.BaseDirectory; 
     DialogResult result = fldDlg.ShowDialog(); 
     foreach (string str in Directory.GetFiles(fldDlg.SelectedPath)) 
     { 

      ReportFile reportFile = new ReportFile(); 
      reportFile.Path = str; 
      reportFile.FileName = System.IO.Path.GetFileName(str); 
      dataGrid1.Items.Add(reportFile); 
     } 
    } 

    private void button_Click_1(object sender, RoutedEventArgs e) 
    { 
     foreach (ReportFile drv in dataGrid1.SelectedItems.OfType<ReportFile>()) 
     { 
      if (drv != null) 
      { 
       DataRow row = drv.Row; 
       Title = row.ItemArray[3].ToString(); 
       System.Windows.MessageBox.Show(Title.ToString()); 
      } 
     } 

     var TransactionFactory = new TransactionFactory(); 
     var Transaction = TransactionFactory.NewTransactionString(); 
     var EnvironmentValue = (string)cmbEnvironment.SelectedValue; 
     var CirieEngineServiceClientFactory = new CirieEngineServiceClientFactory(EnvironmentValue); 

     var CirieEngineServiceClient = CirieEngineServiceClientFactory.NewCirieEngineServiceClient(); 
     var Form = new Cirie.Form() 
     { 
      Path = string.Empty, 
      Title = string.Empty 
     }; 

     var PackageID = Convert.ToInt16(txtPackageID.SelectedText); 
     var Generation = Convert.ToInt16(txtGeneration.SelectedText); 
     var formList = new List<Cirie.Form>(); 
     var stream = CirieEngineServiceClient.PrintFormCollection 
      (Transaction, 
      new Collection<Cirie.Form>(formList), 
      PackageID, 
      Generation 
      ); 
    } 
} 

但我不知道這是否是正確的,因爲有引發異常:無法投類型的對象ReportFile「來類型「System.Data.DataRowView」

我會很感激在這一個請幫助!

回答

2

你可以使用OfType法鑄SelectedItemsReportFile對象,然後訪問ReportFile類的任何屬性:

foreach (ReportFile drv in dataGrid1.SelectedItems.OfType<ReportFile>()) 
{ 
    //... 
} 
+0

這解決了錯誤!謝謝。我還想知道如何檢索數據並將其發送到按鈕單擊的打印服務。由於我現在擁有的代碼能夠在消息框中顯示檢索到的文件。 – user0594

+0

我雖然已經回答瞭如何檢索數據?或者你的意思是什麼數據? – mm8

+0

我編輯了我的問題,並在後面添加了代碼,以便更好地瞭解我正在尋找的內容。 – user0594