2017-02-21 13 views
0

Это мой первый вопрос о stackoverflow, и я совершенно новичок в программировании на 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» в type 'System.Data.DataRowView'

Я очень благодарен за помощь в этом!

ответ

2

Вы можете использовать метод OfType забрасывать SelectedItems к ReportFile объектов, а затем получить доступ к любым из свойств ReportFile класса:

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

Эта ошибка устранена! Спасибо. Я также хотел знать, как я могу получить данные и отправить их в службу печати при нажатии кнопки. Поскольку код, который у меня есть сейчас, позволяет отображать извлеченные файлы в окне сообщения. – user0594

+0

Я, хотя я уже ответил, как получить данные? Или какие данные вы имеете в виду? – mm8

+0

Я отредактировал свой вопрос и добавил код позади, если это поможет понять, что именно я ищу. – user0594