Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von oehrle
Thema: Controls mit .Invoke() / .Begininvoke() in Window aktualisieren lassen
Am im Forum: GUI: WPF und XAML

Hallo, ich experimentiere im Moment mit meiner Applikation. Hier werden jede Mengen von Daten kopiert und in Db's geschrieben, wozu ich auch jede Menge an Ausgaben in der Form ausgebe. das Problem ist, das die Ausgabecontrols ja die aktuellen Daten nicht sofort angezeigt werden. Nun hatte ich zuerst mit dem BackgroundWorker Erfahrungen gesammelt. Nun habe ich aber auch gesehen, das man mit dem Dispatche.Invoke() oder Dispatcher.BeginInvoke() die Controls aktualisieren kann.
Ich habe eine ListBox in der ich den akuellen Status und weitere Meldungen ausgebe. Wenn ich da eine neue Meldung absetze, dan kann ich das doch so ausgeben:


Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(() => lbx_Ablaufplan.Items.Insert(0, "\n\n\nNeue Dateien von Datenpool suchen und in Sammelpool kopieren ...\n")));

So wie ich das verstehe, kann ich für new Action() auch eine Delegatemethode einsetzen, oder?
Das hatte ich auch schon probiert. Das Problem ist, wenn ich das so mache werden meine COntrols nicht beschrieben, es werden keine Meldungen in der ListBox angezeigt.
Muss ich da doch noch einen Abfrage mit CheckAccess und Verify durchführen, wobei ich das so verstehe das man diese Abprüfung nur macht wenn die Aktualisierung aus einem anderen Thread aufgerufen wird?

Thema: MessageBox verschwindet nicht bei WINXP (Application auf Win7 entwickelt)
Am im Forum: GUI: WPF und XAML

Hallo, habe das Problem, dass bei meiner Applikation die MessageBox nach dem klicken auf den "Yes"-Button nicht verschwindet, wenn das Programm auf einem WinXP-Rechner installiert ist. Bei Win7 klappt es. Ich verwende Framework 4.0 Client. Das ist auch auf den Rechnern installiert. Nur bei meinem Win7 ist auch das große FW4.0 drauf. Kann ich irgendwie nach dem klicken von dem "Yes"-Button die Oberfläche neu rendern lassen, oder woran kann das liegen?

Thema: Window mit CodeBehind erstellen und Stackpanel oder Grid für Children einfügen
Am im Forum: GUI: WPF und XAML

Hallo, hatte doch gewußt ich hatte irgendwo etwas gesehen. Hat geklappt. Danke euch für die Hilfe, und hier für weitere die auf der Suche sind, ein Link:
http://msdn.microsoft.com/de-de/library/system.windows.controls.grid.aspx

Thema: Window mit CodeBehind erstellen und Stackpanel oder Grid für Children einfügen
Am im Forum: GUI: WPF und XAML

Hi, den Link hatte ich auch schon. Nun leider ist da ja gerade folgendes:


<Window x:Class=“WPFSample001.AddControls“

    xmlns=“http://schemas.microsoft.com/winfx/2006/xaml/presentation“

    xmlns:x=“http://schemas.microsoft.com/winfx/2006/xaml“

    Title=“AddControls“ Height=“114“ Width=“212“

    >

  <StackPanel Name=“splMain“>

    <Button Name=“btnAddMore“ Click=“btnAddMore_Click“>Add Another</Button>

  </StackPanel>

</Window>

Das wäre bei mir ja nicht der Fall, das sieht bei mir (wenn ich das mal so in XAML darstelle) so aus:

<Window x:Class=“WPFSample001.AddControls“

    xmlns=“http://schemas.microsoft.com/winfx/2006/xaml/presentation“

    xmlns:x=“http://schemas.microsoft.com/winfx/2006/xaml“

    Title=“AddControls“ Height=“114“ Width=“212“

    >
!--< Kein Stackpanel, kein Grid...   Wie füge ich solch ein Element im Code Behinde ein ?? />--! 

</Window>


Wir mein Problem jetzt klarer?

Im Code behind (Beispiel):

Window wnd = new Window();
DatGrid dg = new DataGrid();
dg.ItemsSource = tbl.AsDataView();

wnd.Children.Add(dg): // das geht ja nicht, weil im wnd kein Panel ist.


Versteht man mein Problem nun besser? Die ganzen Beispiele sind immer sehr XAML-lastig.

Thema: Window mit CodeBehind erstellen und Stackpanel oder Grid für Children einfügen
Am im Forum: GUI: WPF und XAML

Bist dir sicher? Was soll denn das miteinander zu tun haben, bzw. mit dem DataBindig?
Hatte das schonmal irgendwo gemacht, aber nicht notiert.

Ich will:
- per Code ein Window erstellen
- ich erstelle per Code ein DataGrid und übergebe Daten die angezeigt werden sollen
- ich will das DataGrid dem Window übergeben (per Code) *.Children.Add()

Leider hat das Window ja noch kein StackPanel oder Grid,wo ich das DataGrid rein schmeißen kann .

Thema: Window mit CodeBehind erstellen und Stackpanel oder Grid für Children einfügen
Am im Forum: GUI: WPF und XAML

Hallo, ich möchte dynamisch aus dem Code heraus ein Window erstellen, und dem dann DataGrids oder ähnliches zufügen. Wie mache ich das, da ich einer Window-Instanz kein Control zuweisen kann, da noch kein Grid oder Stackpanel im Window definiert ist. Wie mache ich da?

Thema: DataView-Daten filtern zur Weiterverabeitung mit Rückwirkung
Am im Forum: Datentechnologien

Hallo, danke für die Info. Ich verwende ja "WPF". Da habe ich auch die DataView von ADO verwendet. Da steig ich noch nicht richtig durch. Kann ich die verwenden, oder besser eine andere (ICollectionView usw ..)? Ich möchte das ja so haben, dass alle Controls auch in anderen Windows auf die Grunddaten des DataSet zugreifen, eine View davon benutzen und somit die Daten auch überall aktualisiert werden. Muss ich da nich irgendwo ein "PropertyChangedEvent" scharfschalten, oder funktioniert das von selbst? Da finde ich mich nicht ganz zurecht. Kann mir da jemand Aufschluss geben?

Thema: DataView-Daten filtern zur Weiterverabeitung mit Rückwirkung
Am im Forum: Datentechnologien

verwendetes Datenbanksystem: <sqlexpress2008>
Hallo, ich schildere mal mein Problem. Ich fahre aus drei Tabellen (SQL) eine gemeinsame Tabelle zusammen (LinQ).

Ich generiere aus der Tabelle sofort eine DataView, die ich an diverse DataGrids verteile (zzur Visualisierung der Daten). Dann muss ich aus einem der DataGrids, das nur einen Teil der Datensätze anzeigt weitere Datensätze suchen, die in der gemeinsamen Tabelle enthalten sind,aber halt in diesem einen Grid nicht dargestellt wegen der Filtereinstellung. Das Problem das ich habe: Ich will diese Untersuchung in der ich weitere Datensätze bekomme an ein weiteres DataGrid übergeben und dort diverse Änderungen in die Datensätze eingeben lassen (per Code, automatisiert). Dann müssen die Daten ja auch in allen anderen DataGrids oder Anzeigeelementen aktualisiert werden, da diese an der DataView hängen.

Mein Problem ist eben, das ich diese Datensätze, die ich untersuche, aus der gemeinsamen Tabelle hole und diese in eine separate Tabelle schreibe und eben "diese" an das DataGrid weitergebe. Somit haben aber meine Daten keinen Bezug zu der DataView, wodurch sich die Daten überall aktualisieren würden. Wie kann ich das am einfachsten machen, ohne alle Änderungen abzufangen und die Änderungen in sie Datensätze aintragen zu lassen?

Thema: DataTable aus untyp. DataSetTabelle mit ausgewählten Spalten erstellen
Am im Forum: Datentechnologien

Bei der Abfrage bekomme ich folgenden Fehlermeldung:

{System.ArgumentNullException: Value cannot be null.
Parameter name: source
at System.Data.DataTableExtensions.AsEnumerable(DataTable source)
at WpfDatenfinder.Form.Auftr...}

Also ich denke es hat damit zu tun, das in der query die Source, d.h. die eigentliche Datentabelle == null ist. Warum aber? Wie mache ich die Abfrage anders damit das passt? Eigentlich möchte 4 Spalten in eine neue Tabelle laufen lassen, habe aber zum testen erst mal nur ein Spalte verwendet.

Ich habe mir zum behelfen erst mal alle Spalten mit LinQ in eine Tabelle laufen lassen und dann die überflüssigen Spalten entfernt.
Kann ich einzlne Spalten überhaupt gleich per LinQ über eine Abfrage in eine Tabelle fahren?

Thema: DataTable aus untyp. DataSetTabelle mit ausgewählten Spalten erstellen
Am im Forum: Datentechnologien

verwendetes Datenbanksystem: <MS2008Express>

Hallo, was mache ich falsch?
In der Linq-Anleitung steht, es müßte so gehen. Aber wahrscheinlich ist das DataSet typisiert.


   //// geht
            IEnumerable<DataRow> query = (IEnumerable<DataRow>)(from o in DsAftVerwalt.Tables["Movdaten"].AsEnumerable()
                                                                where o["AGStatus"].ToString().Trim() == agStatus
                                                                select o);

   //// geht nicht
            IEnumerable<DataRow> query = ((IEnumerable<DataRow>)(from o in DsAftVerwalt.Tables["Movdaten"].AsEnumerable()
                                                              where o["AGStatus"].ToString().Trim() == agStatus
                                                              select new{Spalte1 = o[0]}));


  foreach (DataRow row in query)
            {

            }





Bei der Abfrage bekomme ich folgenden Fehlermeldung:

{System.ArgumentNullException: Value cannot be null.
Parameter name: source
at System.Data.DataTableExtensions.AsEnumerable(DataTable source)
at WpfDatenfinder.Form.Auftr...}

ALso ich denke es hat damit zu tun, das in der query die Source, d.h. die eigentliche Datentabelle == null ist. Warum aber? Wie mache ich die Abfrage anders damit das passt? Eigentlich möchte 4 Spalten in eine neue Tabelle laufen lassen, habe aber zum testen erst mal nur ein Spalte verwendet.

Habe mir mal den Eintrag angesehen.

DataTable mit Linq füllen


Funzt aber so nicht.
Was muss ich noch beachten?

Thema: DataGrid Rules verändern ?
Am im Forum: GUI: WPF und XAML

Habe das Problem, wenn ich aus einem DataGrid Daten lösche, ich eine Fehlermeldung bekomme (roter Kringel um die Zelle, Ausrufezeichen). Wie kann ich das umgehen? Habe eine Tabelle angebunden, aber die Struktur der Tabelle darf in allen SPalten DBNull sein. Wie kann ich diesen Fehler unrerbinden?

Thema: Zwei DataGrids über einen gemeinsamne Scrollbalken horizontal scrollen
Am im Forum: GUI: WPF und XAML

Hallo, geht das irgendwie? Ich habe zwar bisher eine Lösung, aber die ist unschön. Ich habe zwei übereinanderliegende Datagrids. das obere enthält die Daten, das untere die Struktur vom Datendatagrid (es dient als EInstellung für Filterkriterien). Nun haben aber die DataGrids 35 Spalten. Ich habe die beiden ersten Spalten eingeroren, damit man die Auftragsnummer immer noch sieht wenn man nach rechts scrollt. Aber beim unteren DataGrid bleiben die beiden Spalten nicht stehen. Es hängt daran, das ich die horizontale Position vom oberen DataGrid-Scrollbalken an einen eingebetteten ScrollViewer des untere DataGrids übergebe. Wie kann ich das anders machen? Habe schon viel gesucht, aber nichts gefunden, außer einen alten Eintrag im Forum von bernett auf CodeProject, aber die Seite kann nicht mehr geunden werden.
Hat jemand einen Lösungsansatz für mein Problem?

Thema: LinQ-Abfrage mit Distinct() auf eine Spalte von Datensätzen
Am im Forum: Datentechnologien

verwendetes Datenbanksystem: <sqlespress2008>
Hallo, eine Frage zur LinQ mit Distinct(). Gibt es überhaupt die Möglichkeit in einer Abfrage einer Datentabelle mit verschiednenen Spalten, das Ergebnis mit Distinct() auf nur eine Spalte festzulegen? Bei SQL geht das ja.
Hier mal meine Abfrage:


tblMvxMhnPln.Select("Maschine = '" + e.Row["Maschine"] + "' AND Maschinenplanung ≥ " + orgPositionBelegung, "Maschinenplanung", DataViewRowState.Unchanged).Select(x => x["Auftragsnr"]).Distinct( "Hier sollte die Spalte "Auftragsnummer" überwacht werden)

Vermutlich wird nichts geben, da muss ich mir halt eine Methode frickeln.

Thema: LinQ-Abfrage die Datensätze mit Nummer vergleicht und den Datensatz mit größtem Datumswert ausgibt
Am im Forum: Datentechnologien

erledigt

Thema: LinQ-Abfrage die Datensätze mit Nummer vergleicht und den Datensatz mit größtem Datumswert ausgibt
Am im Forum: Datentechnologien

Hallo, die Daten kommen aus eine gespeicherten Prozedur vom SQL-Server wo ich nicht dran komm (bis jetzt halt noch nicht).
Ich lade die Daten in ein DataSet. Habe die Sortierung vorgezogen, hilft aber nicht viel.

Sollte mal vielleicht doch PLinQ testen, habe mit dem aber noch nie gearbeitet.

Thema: LinQ-Abfrage die Datensätze mit Nummer vergleicht und den Datensatz mit größtem Datumswert ausgibt
Am im Forum: Datentechnologien

Hallo, danke. Das ic hda nicht selber drauf gekommen bin. Es geht nun, aber braucht ewig lange um die Daten zu aktualisieren.

Thema: LinQ-Abfrage die Datensätze mit Nummer vergleicht und den Datensatz mit größtem Datumswert ausgibt
Am im Forum: Datentechnologien

verwendetes Datenbanksystem: <sqlexpress 2008>

Hallo, fogendes Paoblem. Habe Daten in ein DataSet eingelesen.
EIne Tabelle muss ich noch eine BErechnung durchführen, wie lange der Datensatz schon liegt. In dieser Tabelle liegen Aufträge, mit ihren ganzen Arbeitgängen. das heißt: Der Auftrag mit der AUftragsnummer xxx ist z.B. 10 x drin, da es 10 Arbeitsgänge gibt (1. BEarbeitung auf Maschine A, 2. Bearbeitung auf Maschine B ...). Der Datensatz hat dann noch ein Meldedatum, wann er an welcher Maschine war. Nun sollte ich hier noch verstrichenen Tage berechnen, von heute bis zur letzten Bearbeitung der Auftragsnummer. Somit müßte ich jede Auftragsnummer durchlaufen und dann noch alle Arbeitsgänge dieser Auftragsnummer und das größte Datum suchen (ist nach Format yyyyMMdd abgelegt).

Wie mache ihc das in LinQ. Ich hoffe da auf mehr Performance, denn in dieser Tabelle sind 70000 Datensätze.

Ich habe hier mal ein Beispiel. Wenn ich das unten einblende, mit dem .Max()-Auswertung bekomme ich folgenden Fehler: "At least one object must implement IComparable."
Hier mal der Code:


//// Alle Auftragsnummern erstmal vereinzeln (Distinct, und Meldedatum muss ein Datum enthalten)
            var auftragsnummerListe = dataTable.AsEnumerable().OrderBy(order=>order["Auftragsnr"]).Where(x => x["Meldedatum"].ToString() != "0").Select(x => x["Auftragsnr"]).Distinct();

            for (int j = 0; j < auftragsnummerListe.Count(); j++)
            {
                //// Auftragsnummer in Variable speichern
                decimal auftragsNummer = Convert.ToDecimal(auftragsnummerListe.AsEnumerable().ToArray()[j]);

                //// Auftrag mit der Auftragsnummer suchen, welche den größten Datumswert hat. Wie Mache ich das?
                var auftrag = dataTable.AsEnumerable().Where(x => x.Field<decimal>("Auftragsnr") == auftragsNummer)
                    .Select(order => new
                                         {
                                             Auftragsnummer = order["Auftragsnr"],
                                             Arbeitsgang = order["Arbeitsgang"],
                                             Meldedatum = order["Meldedatum"]
                                         });        // .Max(c => new { c.Meldedatum }); //==> Wenn ich das einblende, kommt die Meldung "At least one object must implement IComparable."

            }

Kann mir da jemand helfen, wie ich das bei LinQ mit dem IComparable mache?

Thema: Zeile in DataGrid geht bei Aktualisierung verloren
Am im Forum: GUI: WPF und XAML

Hallo, ich habe jetzt eine Ahnung woran es liegen kann. Das Binding denke ich nicht, weil ich mine Tabelle als DataView an die ItemsSource hänge:


 dViewMaschGrp = new DataView(tblMvxMhnPln, "", "Auftragsnr, Arbeitsgang", DataViewRowState.CurrentRows);
            dg_Visudaten.ItemsSource = dViewMaschGrp;

In der Tabelle habe ich eine Spalte als ComboBox, in der Maschinennamen enthalten sind. Sobald ic hin einer Zeile irgendeinen Wert in einer Spalte ändere, und ich dann "return" betätige wird der Wert in der Spalte der ComboBox geleert. Ich habe aber den Filter noch auf diese Spalte gesetzt, deswegen geht diese Zeile verloren. Wie binde ich denn die ComboBox mit ihrem eingestellten Wert korrekt? WEnn ich mir die editierte Zeile ansehe, dann bekomme ich dort den Eintrag "DataRowView.RowView" angezeigt. Das ist das ganze PRoblem denke ich.

Thema: Zeile in DataGrid geht bei Aktualisierung verloren
Am im Forum: GUI: WPF und XAML

Hallo, ich habe ein DataGrid das an eine DataView gebunden ist. Sobald ich eine Zelle aktualisiere (den eingetragenen Wert ändere) oder in eine leere Zelle einen Wert eingebe, verschwindet diese Datenzeile. Was kann dafür die Ursache sein?

Habe mal das RowEditEndig abgefangen, kann aber daraus auch nicht ableiten.
Hat jemad eine Idee?

Thema: Zelle in Table in Word Dokument lässt sich nicht editieren
Am im Forum: Office-Technologien

Hallo, kann mir jemand helfen? Ich muss in einem Word-Dokument sämtliche Bezeichnungen umbenennen und automatisiere das. In TetxBoxen funktionier das. Aber in Tabellen, immer in der ersten Spalte müssen auch die Begriffe ersetzt werden. Wenn ich einen neuen Wert in die Zelle schreiben will. dann bleibt der "alte Text" der Zelle dahinter geklemmt. Warum ? ich muss den doch komplett löschen und überschreiben können. Hat jemand eine Idee?
Hie rmal mein Code:



 opf.Filter = "Word-Dateien(*.doc, *.docx)|*.doc;*.docx";

            if (opf.ShowDialog() == false)
                return;

            //////  set the file name from the open file dialog
            object fileName = opf.FileName;
            object readOnly = false;
            object isVisible = true;
            //////   Here is the way to handle parameters you don't care about in .NET
            object missing = System.Reflection.Missing.Value;

            ////  Make word visible, so you can see what's happening
            WordApp.Visible = true;
            ////  Open the document that was chosen by the dialog
            //Document aDoc = WordApp.Documents.Open(ref fileName, ref missing, ref readOnly, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref isVisible);
            Document aDoc = WordApp.Documents.Open(opf.FileName, ReadOnly: false, Visible: true);
            
            ////  Activate the document so it shows up in front
            aDoc.Activate();

            //// JEe Tabelle im Word-Dokument durchlaufen
            foreach (Table docTbl  in aDoc.Tables)
            {
                //// Jede Row in der Tabelle durchlaufen
                foreach (Row row in docTbl.Rows)
                {
                    //// Erst Zelle der "Row" bereinigen (Texte entfernen)
                    string strTemp = row.Cells[1].Range.Text.Trim();
                    if (strTemp.Contains("\r"))
                        strTemp = strTemp.Replace("\r", "");
                    if (strTemp.Contains("\a"))
                        strTemp = strTemp.Replace("\a", "");

                    //// Suche nach Begriff in Datentabelle
                    DataRow[] rows = ds.Tables[0].Select("F0 = '" + strTemp + ".'");

                    //// Wenn Begriff in DataTable vorhanden, diesen überschreiben
                    if (rows.Length > 0)
                    {
                        //// ==> zwar keine Fehlermeldung, aber die Zelle wird nicht überschrieben, der Text wird davor geklemmt
                        row.Cells[1].Range.Text = rows[0][2].ToString();
                        row.Cells[1].Range.Font.Color = WdColor.wdColorViolet;
                    }

                }
            }

Thema: ControlTemplate oder Template mit mehreren Controls möglich?
Am im Forum: GUI: WPF und XAML

Hallo, ich habe ein Anwendung in der ich verschiedene Menupunkte in einem StackPanel vertikal gelistet darstelle. in jeder Zeile (StackPanel) habe ich eine TextBox für Nummerierung, einen Button (für Ckick-Ereignis zu einer Methode) und eine CheckBox (für an- Abwahl dieses Menupunktes).

Nun meine Frage, kann ich die drei Controls in ein Template (ControlTemplate) packen und genauso auf die Events reagieren? Wenn das möglich ist, hat da jemand ein Beispiel fr so ein Template mit mehr als einem Control?

Thema: LogicalChild aus Window oder Panel entfernen
Am im Forum: GUI: WPF und XAML

Zitat von talla
Hallo,

Steuerelemente sind keine Daten und man sollte nie in Steuerelementen Daten halten. Wenn du Arbeitsabläufe hast, Listen mit Arbeitsanweisungen etc. sind das Daten. Benutz sowas wie nen ItemsControl und um für die entsprechende Darstellung zu sorgen, benutzt man Templates. Wenn du Daten und Aussehen trennst, kommst du erst gar nicht in die Probleme wo du jetzt hast.
Zitat
Aus dem Stackpanel sind wohl die Controls aus dem VisualTree raus, aber im LogicalTRee hängen die wohl noch drin.
Das geht nicht. Der VisualTree ergibts sich ja aus der Darstellung der Elemente im LogicalTree, daher kann nicht etwas im LogicalTree sein, was nicht im VisualTree ist.

Eigentlich halte ich nur den Namen von dem Arbeitsgang im Content fest. Diesen Namen möchte ich dann mal verwenden, um bei einem Click-Ereignis an die Stelle im Textfile des Arbeitsplanes zu springen. Ist das dann so verkehrt?
Wenn alles aus dem Stackpanel raus gelöscht wurde (Children.Clear()) warum kommt dann i,,er noch dieser Fehler?

Thema: LogicalChild aus Window oder Panel entfernen
Am im Forum: GUI: WPF und XAML

Hallo, beschreibe hier mal mein Problem.
Ich habe ein Fenster mit verschiedenen Panels (Stackpanel). Ich verarbeite in dieser Oberfläche Dateien mit Arbeitsabläufen und Parameterdaten zu jedem Arbeitsablauf.
Also, jeder Arbeitsablauf beinhaltet also mehrere Arbeitgänge. Nun stelle ich den Arbeitsgang grafisch dar, über einen Button. Ich lese nun den Plan ein und alle Arbeitsgänge werden in dem Stackpanel dargestellt, was korrekt funktoniert. Wenn ich jetzt aber einen Arbeitsgang abwähle, muss das Stackpanel ja aktualisiert werden. Ich lösche die Buttons aus dem Stackpanel und übergebe die neu organisierte Liste. Soabld ich den ersten Button wieder in das Stackpanel einfüge möchte, kommt der Fehler:
"Specified element is already the logical child of another element. Disconnect it first"

Jetzt hatte ich gesucht, was der Fehler zu bedeuten hat. Aus dem Stackpanel sind wohl die Controls aus dem VisualTree raus, aber im LogicalTRee hängen die wohl noch drin. Das ist mir aber noch nicht gelungen die da herauszubekommen. Wie bekomme ich die Controls da raus? Kann mir jemand einen Tipp geben?

Thema: LinQ Abfrage mit Left Join richtig aufbauen
Am im Forum: Datentechnologien

Kann mir jemand einen Tipp geben? Habe bei MS etwas gefunden, was ich anwenden wollte, aber beim abrufen der Daten bekomme ichden Fehler: "SPecifies cast is not valid"

Habe aber die Spaltentypen wie bei den DB-Tabellen angegeben.

Hier mal der Code , evtl. hat jemand eine Idee oder sieht den Fehler sofort (kann man das irgedwie debuggen??):




           var mvx = DsAftVerwalt.Tables["Movexdaten"].AsEnumerable();
            var mhn = DsAftVerwalt.Tables["Mahnliste"].AsEnumerable();
            var pln = DsAftVerwalt.Tables["Planliste"].AsEnumerable();


            //// Für Default-Row in LinQ
            DataRow dRowMahn = DsAftVerwalt.Tables["Mahnliste"].NewRow();
            dRowMahn[1] = 0;
            dRowMahn[2] = "0000";
            dRowMahn[3] = "0000";
            dRowMahn[4] = DateTime.Now;


 var xxx = from m in mvx
                      orderby m.Field<Decimal>("Auftragsnr")
                      join p in mhn on m.Field<Decimal>("Auftragsnr") equals p.Field<Decimal>("Auftragsnummer") into outer
                      from o in outer.DefaultIfEmpty(dRowMahn)
                      select new
                                 {
                                     Auftragsnr = m.Field<Decimal>("Auftragsnr"),
                                     Maschinengruppe = m.Field<String>("Maschinengruppe"),
                                     AGStatus = m.Field<String>("AGStatus"),
                                     AGBeschreibung = m.Field<String>("AGBeschreibung"),
                                    Mahndatum = o.Field<DateTime>("Mahndatum")
                     };

Thema: LinQ Abfrage mit Left Join richtig aufbauen
Am im Forum: Datentechnologien

Ok, werde mich mal versuchen. Das ist wirklich ein blödes PRoblem, an dem ichda schon seit mitte der Woche dran hänge. Nochmal zum Verständnis: Die Daten der drei Tabellen ergänzen sich zu einem Auftragsüberblick. Tab1 hat die Werkzeugdaten, Tab2 die Mahndaten, Tab3 die Planungsdaten für Abarbeitung. Alle drei Tabellen sind über die Spalte Auftragsnummer zueinander zu verknüpfen. Bei Tab2 und Tab3 kann es sein, das es noch keinen Datensatz zu Tab1 gibt. Diese Datensätze müssen dann aber auch angezeigt werden. Der user kann dann noch über eine Filtermaske seine genauen AUftagsbereiche filtern, und dann in die Spalten der Tab3 die Daten für die geplante Bearbeitung eintragen. Nur diese geänderte oder neu eingetragenen Daten der Tab3 werde zurückgespeichert. Das alles wäre dann am besten in einem DataGrid darzustellen. Ich tu mir da gerade echt schwer. Also versteht man das was ich vorhabe, oder muss ich das nochmal besser schildern?

Thema: LinQ Abfrage mit Left Join richtig aufbauen
Am im Forum: Datentechnologien

Zitat von oehrle
Danke dir, habe das gerade vorher getestet und es funzt. Bin erst al guter Laune darüber. Kann ich das in LinQ (also die QUery) auch noch gleich in DataRow[] casten oder sofort in eine DataTable stecken? Wenn ich das nur schon ineinem DataRow[] hätte, wäre das schonalles, dann die Dinge in eien Tabelle schaufeln, oder da gibt es noch etwas mit .Tolist().

Ich habe heute morgen nochmal getestet. Ich komme da noch nicht zum Ziel. Ich möchte diese Zusmmenfassung der drei Tabellen in eine Tabelle packen, und dann in einem DataGrid darstellen. Dort soll man dann in den Feldern der Tab3 (also Plantabelle) Werte eintragen, welche ich dann durch den RowState "modified" oder "added" erfassen kann und dann diese Änderungen in die Datenbank schreibe.

Ich dachte est mal an so etwas, alle Zeilen in eine DataRow[]-Array zu schreiben, aber da gibt es auch´Probleme mit Spaltentypen:


 IEnumerable<DataRow[]>  query = (IEnumerable<DataRow[]>) (from m in mvx
                                                       orderby m["Auftragsnr"]
                                                       join p in mhn on m["Auftragsnr"] equals p["Auftragsnummer"] into outerMvxMhn
                                                       from omm in outerMvxMhn.DefaultIfEmpty()
                                                       join z in pln on m["Auftragsnr"] equals z["Auftragsnummer"] into outerMvxMhnPln
                                                       from outerPln in outerMvxMhnPln.DefaultIfEmpty()
                                                       select new
                                                                  {
                                                                      //mvx,
                                                                      //outerMvxMhn,
                                                                      outerMvxMhnPln 
                                                                  });

Kann mir da jemand Unterstützung geben? Am besten wäre es wennich die query mit allen drei verjointen Tabellen in einer Tabelle hätte.

Thema: LinQ Abfrage mit Left Join richtig aufbauen
Am im Forum: Datentechnologien

Danke dir, habe das gerade vorher getestet und es funzt. Bin erst al guter Laune darüber. Kann ich das in LinQ (also die QUery) auch noch gleich in DataRow[] casten oder sofort in eine DataTable stecken? Wenn ich das nur schon ineinem DataRow[] hätte, wäre das schonalles, dann die Dinge in eien Tabelle schaufeln, oder da gibt es noch etwas mit .Tolist().

Thema: LinQ Abfrage mit Left Join richtig aufbauen
Am im Forum: Datentechnologien

Hi, endlich hats geklappt. Das war der Fehler mit (o==null).

Jetzt kommt noch eine dritte Tabelle dazu, die auch nur ein paar Datensätze hat, aber auch zu jedem Datensatz in Tabelle1 (mvx) eine leere oder wenn Daten vorhanden die Felder gefüllt hergeben muss.

Ich habe das erst mal in eine weitere Query ausgelagert, siehe Code:


var yy =    from m in xx orderby m.m["Auftragsnr"]
                        join p in pln on m.m["Auftragsnr"] equals p["Auftragsnummer"] into outer
                        from o in outer.DefaultIfEmpty()
                        select new
                                    {
                                        //Auftragsnummer = m["Auftragsnr"], Mahndatum = ((o == null) ? "" : o["Mahndatum"])
                                        m,  o
                                    }; 

Wie kann ich das aber in eine Abfrage packen, damit ich dann 3 Rows habe??

Thema: LinQ Abfrage mit Left Join richtig aufbauen
Am im Forum: Datentechnologien

Hallo, ich muss mich da langsam hineintatsten. Arbeite als schon mit LinQ, aber nicht so verzwickte Sachen. Ich versuche erst mal so anzufangen. Ich habe die beiden Tabellen mvx und mhn.
In der mvx sind alle Datenzeilen relevant.
In der mhn sind nur ein paar Datensätze vorhanden, Schlüssel zueinander ist die Auftragsnummer.

Jetzt möchte ich eine Abfrage erstellen, mit aalen Datensätzen von Tabelle mvx und den zugeordneten Datensätzen von Tabelle mhn. Ist kein Datensatz von mhn vorhanden, wird ein Default-Datensatz zugewiesen.

Hier mal ein Beispiel, funktioniert aber nicht. Sobald in der mhn ein Datensatz nicht vorhanden ist, streikt die Abfrage. Ich habe jetzt mal nur von jeder Tabelle eine Spalte verwendet.


 var mvx = DsAftVerwalt.Tables["Movedaten"].AsEnumerable();
            var mhn = DsAftVerwalt.Tables["Mahnliste"].AsEnumerable();

            var xx =    from m in mvx orderby m["Auftragsnr"]
                        join p in mhn on m["Auftragsnr"] equals p["Auftragsnummer"] into outer
                        from o in outer.DefaultIfEmpty()
                        select new
                                    {
                                        Auftragsnummer = c["Auftragsnr"], Mahndatum = ((o["Mahndatum"] == DBNull.Value) ? "" : o["Mahndatum"])
                                    };

Thema: LinQ Abfrage mit Left Join richtig aufbauen
Am im Forum: Datentechnologien

verwendetes Datenbanksystem: <Sql2008R2>
Hallo, ich habe eine Problem mit einer Abfrage in LinQ. Habe in FOren gesucht und auch etwas gefunden. Ich habe drei Tabellen, die alle in einem Dataset eingelesen sind. Jetzt will Tabell1 / Tabelle2 / Tabelle3 miteinander verknüpfen. Tabelle1 ist der Master er hat zu jeder der beiden anderen Tabellen auf jeden Fall einen Datensatz. Tabelle2 oder Tabelle3 habe nicht immer zu jedem Datensatz in Tabelle1 einen Datensatz. Ich möchte also somit eine löchrige Gesamttabelle erstellen (aus den drei Tabellen). Der Bezug ist die Auftragsnummer. Habe da zwei Konstrukte aufgebaut, haber aber das Problem, das beim zweiten Konstrukt beim abrufen der Daten der Compiler auf die Barrikaden geht, sobald in "Mahnliste" oder "Planliste" ein Datensatz nicht vorhanden ist. Da sollen dann einfach die Felder leer bleiben. (Jetzt fällt mir was ein, in den beiden Tabellen "Mahnliste" und "Planliste" sind Spalten, die nicht NULL sein dürfen, kann das evtl. das Problem sein?) Wie gebe ich für solche leere Felder Standardwerte vor?

Hier mal die beiden Konstrukte:



            var test = from move in DsAftVerwalt.Tables["Movedaten"].AsEnumerable()
                        join mahn in DsAftVerwalt.Tables["Mahnliste"].AsEnumerable() on move["Auftragsnr"].ToString().Trim() equals mahn["Auftragsnummer"].ToString().Trim()  into moveMahn
                        join plan in DsAftVerwalt.Tables["Planliste"].AsEnumerable() on move["Auftragsnr"].ToString().Trim() equals plan["Auftragsnummer"].ToString().Trim()  into movePlan

                        from mahn in moveMahn.DefaultIfEmpty()
                        from plan in movePlan.DefaultIfEmpty()


                        select new
                        {
                            Auftragsnummer = move["Auftragsnr"],
                            Maschinengruppe = move["Maschinengruppe"],
                            Mahndatum = mahn["Mahndatum"],
                            Maschine = plan["Maschine"]

                        };


Hier das zweite Konstrukt:


            var test1 = from move in DsAftVerwalt.Tables["movedaten"].AsEnumerable()
                        from mahn in DsAftVerwalt.Tables["Mahnliste"].AsEnumerable().Where(x => x["Auftragsnummer"].ToString().Trim() == move["Auftragsnr"].ToString().Trim())
                        from plan in DsAftVerwalt.Tables["Planliste"].AsEnumerable().Where(y => y["Auftragsnummer"].ToString().Trim() == move["Auftragsnr"].ToString().Trim()).DefaultIfEmpty()

                        select new
                       {
                           Auftragsnummer = move["Auftragsnr"],
                           Maschinengruppe = move["Maschinengruppe"],
                           Mahndatum = mahn["Mahndatum"],
                           Maschine = plan["Maschine"]

                       };

Kann mir da jemand Unterstützung geben?