2017-02-21 1 views
0

Dies ist meine erste Frage zu Stackoverflow und ich bin völlig neu in der Programmierung in C#, also bitte tragen Sie mit mir. Ich habe eine Anwendung mit WPF erstellt, in der ich eine Liste von Dateien mit der Erweiterung .rpt in einem Datagrid angezeigt habe. Das Datagrid enthält die Liste der Dateinamen und es gibt auch eine Checkbox-Spalte im Datagrid. Diese Dateien werden im Grid dynamisch aus einem Ordnerbrowser gefüllt, wenn ich auf eine Schaltfläche klicke. Ich stecke auf Seiten davon, diese Dateien zum Drucken zurückzuholen, wenn ich auf eine zweite Schaltfläche klicke (Drucken, da ich einen Dienst aufrufen muss, um die ausgewählten Dateien zu drucken). Ausgewählte Zeilen mit Berichtsdateien aus einem WPF-Datagrid abrufen Klicken Sie auf

Dies ist der Code-Schnipsel, die ich bis jetzt versucht:

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 
      ); 
    } 
} 

Aber ich bin nicht sicher, ob es richtig ist, da es eine Ausnahme geworfen: Kann nicht das Objekt des Typs ‚Report‘ zu gieße Typ 'System.Data.DataRowView'

Ich würde wirklich gerne Hilfe zu diesem bitte!

Antwort

2

Sie könnten die OfType Methode verwenden, die SelectedItems zu ReportFile Objekte zu werfen und greifen dann alle Eigenschaften der ReportFile Klasse:

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

Dies beschlossen, den Fehler! Danke. Ich wollte auch wissen, wie ich die Daten abrufen und per Knopfdruck an den Druckdienst senden könnte. Da der Code, den ich gerade habe, es schafft, die abgerufenen Dateien in einem Meldungsfeld anzuzeigen. – user0594

+0

Ich habe zwar schon geantwortet, wie man die Daten holt? Oder welche Daten meinst du? – mm8

+0

Ich habe meine Frage bearbeitet und den Code hinterher hinzugefügt, wenn das besser hilft zu verstehen, wonach genau ich suche. – user0594

Verwandte Themen