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: 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?

Thema: DataGrid mit gebundener DataView und Datenbankaktualisierung
Am im Forum: GUI: WPF und XAML

Also nochmal: die drei Tabellen sind über die Spalte "Auftragsnummer" miteinander zuordenbar (Relationns). Ich lese Tabelle1 / Tabelle2 / Tabelle3 in das DataSet ein und erstelle zwischen Tab1 und Tab3 eine Relation als auch bei Tab2 und Tab3.
Die tab3 hat ca. 70000 Datensätze, tab2 ca. 100, tab3 noch 2 Datensätze (jetzt nicht wundern, ich erkläre weiter). Tab1 hat WErkzeugdaten gespeichert, Tab2 Mahndaten, Tab3 soll vom User editiert werden können, für BEmerkungen der Abarbeitungsfolge. ALso d.h. es müssen alle Daten im DataGrid visualisiert werden, aber nur die Änderungen die an den Spalten von Tab3 gemacht werden, sollen in die Datenbank zurückgeschrieben werden. Leider funktioniert das bei mir nicht. Ich habe die Tab1 um die notwendigen Spalten von Tab2 und Tab3 erweitert, in Schleifen die vorhandenen Daten aus Tab2 und Tab3 in die tab1 eingesetzt, die Daten an eine DataView gebunden und dann die DataView an das DataGrid gesetzt. Wenn ich nun die Daten im DataGrid anzeigen lasse und ändere in den Spalten etwas, die Tab3 betreffen, tut sich gar nichts. In Tab1 sehe ich nicht einmal beim RowState ein "modified" oder"added". Was mache ich da falsch?

Oder: Wie kann ich die betreffenden Spalten der Tab3 separat an die Tabelle3 des DatSet in der CodeBehind binden?

Thema: DataGrid mit gebundener DataView und Datenbankaktualisierung
Am im Forum: GUI: WPF und XAML

Hallo, ich scheitere im Moment an einem DataGrid, das mit denDaten einer DataView versorgt wird

Ich lese drei DB-Tabellen in ein DataSet ein. Diese Tabellen verknüpfe ich im DataSet (Tabelle1 mit Tabelle2, Tabelle1 mit Tabelle3) mit DataRelations. Der Hintergrund: Alle drei Tabellen werden dann an eine DataView gelegt, und diese dann in einem DataGrid visualisiert. Jetzt hat der User alle Daten die er braucht im DataGrid. Nun kann er Daten in den Spalten der Tabelle3 eingeben. Dann müssen die geänderten Daten über einen Cick auf einen Button gespeichert werden (alle veränderten Daten der Tabelle3). Nun, ich hatte schon verschiedene Ansätze versucht:

  • DataTable des DataSets auf DataRowState untersucht ==> hatte aber keine Änderungen angezeigt bekommen
  • Alle Datensätze ( DataGrid.Items in DataRowView gewandelt) durchlaufen und auf IsEdit / IsNew / RowVErsion abgeklappert ==> keine Änderung sichtbar
    Wie mache ich das nun am einfachsten, die DataRow die verändert wurde zu greifen, damit ich die in die Datenbank zurückschreiben kann?

Hat einer einen guten Ansatz? Das mit den verknüpften Tabellen sehe ich als Vorteil, da ich so nur die nötigen Daten in separaten Tabellen speichern kann und keine gesamte Tabelle ertsellen muss.

Habe mal probiert, nur eine Tabelle an die View zu geben. Dann kann ich die die Tabelle durchlaufen wenn ich einen Button klcike, und bekomme die modofizierten DataRows. Aber mit allen drei zusammen in eine Tabelle gapackte Daten funktioniert das nicht, wenn ich diese visualisiere und Daten in Zellen eintrage. Hat jemand eine Idee?

Thema: Klassen, Methoden aus COM-DLL in C# aufrufen/verwenden
Am im Forum: Rund um die Programmierung

Hallo, ich tu mir schwer mit dem verwenden von Methoden und Klasen aus eine COM-DLL die in C++ geschrieben wurde (was ja eigentlich egal sein soll).

Ich habe ein lauffähiges Programm, bei dem alles shon soweit gepasst hatte. Jetzt hat die Entwicklerfirma die DLL erweitert oder verändert.

Ich habe sogenannte Interfaces eingebunden, und denen die GUID zugewiesen.
Danach habe ich Daten verarbeitet, und aus einem Objekt aus der COM-DLL eine Instanz erzeugt und Daten eingepflegt, verarbeitet. Jetzt, mit der neuen Version krachts beim erstellen der Instanz. es wird bemängelt, das dieses Objekt nicht registriert ist, siehe Fehlermeldung cer ComException:

Fehler
Retrieving the COM class factory for component with CLSID {96463B84-E773-49B4-8EB9-5C5AC4A39FE7} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).
Ich habe aber aus der COM-DLL mit tlbImp.exe eine Interop-DLL erstellt, und diese unter Projekt/Verweise eingebunden. Somit muss man ja diese nicht mehr registrieren mit regsrv32 <DLL-Datei>.

Ich habe mir die interop-DLL dann mal im NetReflector angesehen. Das ist diese Instanz die ich erstelle als Schnittstelle bekannt, auch mit der GUID versehen.

Wie gesagt, ich bin auf diesem Gebit total neu, so etwas einzubinden. Mit den bisherigen Mitteln hats gekklappt.

Muss ich diese SChnittstelleninstanz noch irgendwie mit der GUID-Nummer in meienm Programm verkuppeln, aber wie mache ich das?

Thema: WPF-Anwendung bewirkt Bluescreen oder ändert Bildschirmauflösung
Am im Forum: GUI: WPF und XAML

Hallo, ich habe eine WPF-Appliaktion die auf verschiedenen Maschinen läuft. Durch den vermehrten Einsatz habe ich jetzt festgestellt, dass bei manchen Maschinen das Betriebsystem komplett zusammenbricht (Bluescreen), wenn das Programm in der Taskleiste liegt (ca. 5-10 minuten) und dann aus der Taskleiste maximiert oder hergeholt wird. Bei anderen Maschinen ist das wiederum nicht der Fall. Und bei einer Maschine habe ich festgestellt, das während dem Arbeiten mit dem Programm plötzlich die Auflösung auf 640x480 gesetzt wird, und kurz darauf dy BS abstürtzt (Bluescreen). Da sehe ich aber noch eine kurze Meldung, das es sich um den Grafiktreiber handelt. Die Maschinen, bei denen das passiert habe wohl eine internen onboard Intel GMA Grafikchip.
Bei den Maschinen bei denen alles funktioniert, die haben (was ich bis jetzt gesehen habe) NVidia-Grafikchips (GT-Serie 220 und so). Ich weiss nicht ob die onboard oder extern sind, aber ich habe diese Probleme nicht. Hat jemand eine Idee, ob man da etwas machen oder einstellen kann?
Wäre sehr froh um eine Hilfe oder Nachricht.

Thema: WPF-Anwendung bricht bei Start zusammen, wie bekomme ich Fehlerquelle
Am im Forum: GUI: WPF und XAML

Hallo, den habe ich angelegt, aber nur keine Fehlerbehandlung ausgeführt, nur eine TExtboxausgabe, falls der angesprungen wird. Habe aber nun mal eine TryCatch reingehängt. Problem ist, kanns erst in übernächster Woche testen, weil ich nicht an die Maschinen komme. Gibts da irgendwelche bestimmte Exceptions die man abfangen sollte? Wie ich gelesen habe, sollte ja die Exception erst mal reichen (wird hier wohl dann wie bei WInFOrm sein).

Thema: WPF-Anwendung bricht bei Start zusammen, wie bekomme ich Fehlerquelle
Am im Forum: GUI: WPF und XAML

Hallo, habe ein Problem mit meiner WPF-Applikation. Ich habe eine Anwendung erstellt, läuft bei mir auf dem Rechner. Habe die Applikation dann auf einem anderen Rechner drauf gemacht. Die .Config.Exe habe ich verbogen, siehe App.config und *.exe in unterschiedlichen Ordnern

Ja, ds hat dann alles funktioniert, bis ich noch mal was am Pfad der Verbiegung für .COnfig.Exe gemacht habe. Dann gings auf den anderen Maschinen nicht mehr. Bei mir läufts noch, auf dem Rechner. Habe dann mal den Pfad und das Verzeichnis ausgeben lassen, wird korrekt ausgegeben, sollte alles passen. Nur bei den anderen Maschinen kackt die Schei**** dann ab und bringt nur eine Fehlerberichterstattung. bei den WInFOrms habe ioch in der Main-Routine TryCatch einabeuen können. Hier habe ich bisher in der App.XAML.cs tryCatchs eingebaut, springt aber nicht an.

Hie rmal mein File:


public partial class App : Application
    {
        
        private void Application_Startup(object sender, StartupEventArgs e)
        {
            string name =  Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
            string ExeDatei = Path.GetFileName(Assembly.GetEntryAssembly().GetName().CodeBase);

            string programmPfad = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) + @"\";
            programmPfad +=  ExeDatei.Remove(ExeDatei.Length - 4) + @"\";

            programmPfad += ExeDatei + ".config";

            if (File.Exists(programmPfad))
            {
                MessageBox.Show(programmPfad);
                try
                {
                    AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", programmPfad);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message + "\n" + ex.InnerException.Message);
                }
            }
            else
            {
                MessageBox.Show(programmPfad+ "\n Bitte Anwendung beenden!",
                                "Fehler: Pfad oder Datei nicht erreichbar",
                                MessageBoxButton.OK, MessageBoxImage.Exclamation);
            }
            


        }

        //// Für Auswertung
        private void Application_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
        {
            MessageBox.Show("Application_DispatcherUnhandledException");
        }

        //// Für Auswertung
        private void Application_Activated(object sender, EventArgs e)
        {
            
        }

        //// Für Auswertung
        private void Application_LoadCompleted(object sender, System.Windows.Navigation.NavigationEventArgs e)
        {
            MessageBox.Show("Application_LoadCompleted");
        }
    }

Hat jemand eine Idee? Mache schon den halben Tag an dem Ding rum. Ich muss irgendwie rausbekommen, ob eine DLL-Abhängigkeit oder irgend eine Policy oder sonst etwas dabei greift. Hat jemand eine heise Idee?

Thema: App.config und *.exe in unterschiedlichen Ordnern
Am im Forum: GUI: WPF und XAML

ujr, danke für die Hilfe, hat geklappt.

Thema: App.config und *.exe in unterschiedlichen Ordnern
Am im Forum: GUI: WPF und XAML

Halli ujr. den Pfad kann ich abrufen, aber kann den hier nicht setzen:

AppDomain.SetData("APP_CONFIG_FILE", programmPfad + nameConfigFile);

Trage das mal in die app.xaml.cs ein. DAnn siehst, das .SetData nicht existiert.

Thema: App.config und *.exe in unterschiedlichen Ordnern
Am im Forum: GUI: WPF und XAML

Hallo ujr, hier mal ein Beispiel. Der Code wird in der program.cs eingesetzt.


string programmPfad = null;

//// Name der gestarteten Applikatioin auslesen, Suffix mit "." abschneiden
string name = Path.GetFileName(Application.ExecutablePath);
name = name.Remove(name.Length - 4);

//// Pfad festlegen, wo die .exe.config liegt
programmPfad = @"c:\Programme\MeineApplikation + "\\";
//// Name für .exe.config festlegen
string nameConfigFile = name  + ".exe.config";

//// Pfad für die app.config auf anderen Ort und anderen Namen (Namespace.exe.config) umbiegen
AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", programmPfad + nameConfigFile);

Nun eben das Problem wie ich das bei WPF mache. Ich brauche dort den Startpfad, sowie die AppDomain, die man so nicht beschreiben kann wie bei WinForm. Da bauch ich Hilfe.

Thema: App.config und *.exe in unterschiedlichen Ordnern
Am im Forum: GUI: WPF und XAML

Hallo, bis jetzt hat noch keiner etwas dazu gewußt. Ich erkläre noch etwas zu dem Problem.
Die Applikation läuft auf verschiedenen Maschinen. Viele Maschinen haben eine unterschiedliche Ornerstrukturen auf ihren Platten, wo Daten abelegt werden (was natürlich "SCh****" ist ich weiss) aber ich kann das System nicht rumkrempeln. Deswegen hatte ich das für diese WinForm-Applikation so gemacht. Alle Maschinen sind auf die ausführbare EXE-Datei gelinkt (Desktop--Link). Damit aber bei jeder Maschine individuell die Verzeichnisse in der application.config eingestellt weren können, mußte diese in ein anderes Verzeichnis als die ausführbare EXE-Datei (diese liegt ja auf dem Netzlaufwerk). Somit habe ich es so gemacht, dass sie ".exe.config" auf der Maschine in einem fest definierten Ordner leigt, der bei allen Maschinen gleich sein muss. So habe ich nicht das Problem, das beim generieren einer neuen EXE-Datei an allen Maschinen die Pfade in der ".exe.config" angepasst werden müssen. Das zu meinem PRoblem. Da ich mittlerweile mit WPF arbeite , habe ich nun keine Ahnung wie ich das bei WPF verbiegen kann. hat jemand eine andere Idee?

Thema: App.config und *.exe in unterschiedlichen Ordnern
Am im Forum: GUI: WPF und XAML

Hallo, unter den WinFOrms war es möglich, die application.exe.config in einem anderen Verzeichnis zu deponieren, als die ausführbare *.exe - Datei.

Wie macht man das in WPF, oder besser gesagt geht das noch? Hat jemand einen Link dazu? Im FOrum habe ich dazu noch nichts gefunden. Bei WPF habe ich schon mal das Problem, wo ich den Änderungscode rein schreiben soll (bei WinForms war das bei "Program.cs").

Thema: Einer Anwendung Rechte (auf ein Verzeichnis) geben, die der Anwender selbst nicht hat
Am im Forum: Rund um die Programmierung

Hallo herbivore, also denkst ich könnte die User die Dateien in einem gesonderten Ordner wo sie SChreibrechte haben ablegen lasssen. Dann geift ein Dienst (evtl. mit FileWatcher) die Dateien ab, untersucht diese und schiebt diese ins korrekte Verzeichnis?? Das könnte ich machen.

Wenn man es aber einfacher haben möchte, wäre es auch möglich die Berechtigung wöhrend dem Speichervorgang zu verbiegen und nachher wieder zurücksetzen oder über einen anderen Account?

Das mit dem zusätzliche Account würde ich befürworten, wenn
- ich das alles aus dem Programmcode managen kann
- der Aufwand nicht zu riesig ist

Hat da jemand einen passenden Link für das Account-Gedöns?

Thema: Einer Anwendung Rechte (auf ein Verzeichnis) geben, die der Anwender selbst nicht hat
Am im Forum: Rund um die Programmierung

Hallo, ich habe iene Frage an euch. Ich erstelle gerade eine Anwendung, die diverse Programmdateien verwaltet. Diese Dateien werden auf unserem Server je nach Datei in spezielle Ordnerstrukturen abgelegt. Bisher haben diese Verwaltung immer Personen mit Lese- und Schreibrechten ausgeführt.
Jetzt kommt der Haken. Nun sollen alle User, auch solche die keine Schreib- und Leseberechtigung haben diese Datenfiles dort archivieren können. Das Archivieren funktioniert automatisch, man brauch nur einen Button zu klicken, alles andere läuft selbständig.
Wie könnte ich das machen? Diese User ohne Berechtigung sollen nicht in den Genuss kommen diese Dateien zu sichten oder zu ändern. Deswegen keine Schreib-/Leserechte.

Kann man die Rechte per Code kurzzeitig ändern? macht das Sinn oder ist das eine simmvolle Möglichkeit (Userrechte vergeben aus einem anderen Rechner) ??

Oder wie macht man das am saubersten?

Thema: Problem bei Constraint-Erstellung
Am im Forum: Datentechnologien

Ich habe gerade noch etwas festgestellt. Ich lese ja uas einer SQL-Datenbank die Daten in das DataSet. Es besteht aber keine Relations. Wenn ich das DataSet klone, kann ich die Relations und ForeignKeys erzeugen. Also hängt es dasmit zusammen, das es zu jedem Parent-Datensatz eine N-Zahl von Child-Datensätze geben muss. Kann ich das irgendwie deaktivieren, damit die Parent-Child- Beziehung trotzdem wirkt, obwohl es keinen Child-Datensatz zum Parent-Datensatz gibt?

Wer hat eine Idee?

Thema: Problem bei Constraint-Erstellung
Am im Forum: Datentechnologien

Hallo, habe auch so ein Problem. Ich habe ein DataSet mit 20 Tabellen.
Die erste Tabelle (Tabelle 0) "kann" eine 1:N Beziehung ju jeder ander Tabelle haben (Tabelle 1 - 20).
Nun möchte ich eine DataRelation und genauso ein ForeignKey erstellen.

Die DataRelation soll erstmal das Zusammengehören von Tabelle 0 zu jeder anderen bestimmen.
Der ForeignKey soll Rule.Delete auf "Cascade" setzen, damit alle Datensätze in Tabelle 1 - Tabelle 20 gelöscht werden sobald ein Datensatz in Tabelle 0 gelöscht wird.

Beim anlegen der DataRelation


DataColumn parentCol = Form1._dsSqlTabellen.Tables[0].Columns["Dateiname"];
            DataColumn childCol = Form1._dsSqlTabellen.Tables[1].Columns["Bezeichnung"];

            Form1._dsSqlTabellen.Relations.Add("Rel01", parentCol, childCol, true);

bekomme ich sofort die Fehlermeldung: "This constraint cannot be enabled as not all values have corresponding parent values"

Dieser Fehler tritt schon bei der ersten Relation von Tabelle 0 zu Tabelle 1 auf. Es ist aber auch so, das von Tabelle 0 nicht in jeder der anderen Tabelle ein Bezug besteht. Das heiß also ein Datensatz in Tabelle 0 hat evtl. erst einen Partner in Tabell 5 oder tabelle 10. Kann das ein Grund für die Meldung sein?


Ich habe gerade noch etwas festgestellt. Ich lese ja uas einer SQL-Datenbank die Daten in das DataSet. Es besteht aber keine Relations. Wenn ich das DataSet klone, kann ich die Relations und ForeignKeys erzeugen. Also hängt es dasmit zusammen, das es zu jedem Parent-Datensatz eine N-Zahl von Child-Datensätze geben muss. Kann ich das irgendwie deaktivieren, damit die Parent-Child- Beziehung trotzdem wirkt, obwohl es keinen Child-Datensatz zum Parent-Datensatz gibt?

Wer hat eine Idee?

Thema: TextBoxeinträge in Gruppierungen erfassen und Inhalt ändern
Am im Forum: Office-Technologien

Hallo, ich habe noch nichts genaues gefunden, wie ich das machen kann. Kannst mir mal ien Tipp dazu geben? Vielleicht muss ich auch anders ansetzen, und nicht mit den Shapes arbeiten? IRgend jemand hat doch dieses Problem bestimmt auch schon gehabt?

Thema: TextBoxeinträge in Gruppierungen erfassen und Inhalt ändern
Am im Forum: Office-Technologien

Hallo, ich habe ein esehr interesantes Thema, an dem ich schon zwei Tage dran hänge. Das Problem ist folgendes: Ich habe eine Automatisierung in C# erstellt, welche ein Word Dokument durchsucht, und sämtliche Einträge aus einer Datenbank mit der im Dokument abgleicht, wenn nötig den Ausdruck ersetzt. Nun ist es so, das ich im Dokument Zeichnungen habe. An diese Zeichnungen habe ich in Word Textboxen eingefügt, in denen ich Zahlenwerte reingeschrieben habe (Bezeichner). Damit mir nicht immer die ganze Formatierung flöten geht, habe ich diese Bilder und Textboxen jewils gruppiert. Mein Dokument hat nun so ca. 100 Seiten und auf jeder 2. Seite so eine Gruppierung. Nun habe ich das PRoblem, das beim automatisierten Suche und ersetzen die Textboxen in der Gruppierung nicht erfasst werden. Nach längerem nachforschen habe ich erkannt, dass man diese Objekte als "Shapes" ansprechen muss, und dann prüfen muss ob es eine Textbox ist und man kann dann den Text falls nötig austauschen. Wenn ich aber eine Gruppierung mit einem Bild und Textboxen habe, geht das nicht. Ich kann dann die Textbox nicht wie gewohnt ansprechen.

Mein Bespiel:

  foreach (Shape shp in aDoc.Shapes)
            {
                //// Bist du nicht gruppiert und eine Textbox, auswerten und wenn nötig ersetzen (funktioniert)
                if (shp.Type == Microsoft.Office.Core.MsoShapeType.msoTextBox)
                {
                    if(shp.TextFrame.TextRange.Text.Trim().Contains("01.02\r"))
                        shp.TextFrame.TextRange.Text.Replace("01.02", "01.02.00");
                }

                //// Bist du eine Gruppierung, dann die einzelnen Element aufbröseln
                if(shp.Type == Microsoft.Office.Core.MsoShapeType.msoGroup)
                {
                    //shp.Ungroup();
                    //shapeRange =shp.Ungroup();
                    
                    

                    //int m = shapeRange.Count;

                    for (int i = 1; i ≤ shp.GroupItems.Count; i++)
                    {

                        //string d = shapeRange[i].Range(i).TextFrame.TextRange.Text.Trim();
                        //string h = shapeRange[i].TextFrame.TextRange.Text;
                        //if (shp.GroupItems.Range(i).Type == Microsoft.Office.Core.MsoShapeType.msoTextBox))

                        //// Bist due eine Textbox, dann Werte Inhalt aus und ersetze wenn nötig
                        if (shp.GroupItems[i].Type == Microsoft.Office.Core.MsoShapeType.msoTextBox)
                        {
                            //// ==> Hier kracht es
                            //string g = shp.GroupItems.Range(shp.GroupItems[i]).TextFrame.TextRange.Text;


                            //// Fehlermeldung ==> "System.OutOfMemoryException" erscheint
                            if (shp.GroupItems.Range(i).TextFrame.TextRange.Text.Trim().Contains("01.02\r"))
                                shp.GroupItems.Range(i).TextFrame.TextRange.Text.Replace("01.02", "01.02.00");
                            
                        }
                    }

                }
                //shapeRange.Regroup();
            }

Hat jemand einen Tipp?

Thema: DataGrid als Suchmaske
Am im Forum: GUI: WPF und XAML

Hallo gfoidl, das mit der dyn. Klasse hat geklappt. Habe Freitag mittag noch etwas mit DataGrid experimentiert. So wie ich das geschildert habe, 4 Rows in das "SuchGrid" einfügen, jede Row ist für einen Operator gedacht(≥, ≤, == , like) und dann kann in jeder Spalte der 4 Rows je nach Suchkriterieum etwas eingegeben werden (Bereichseinschränkung, Like für ähnlichen Dateinamen ...) wird wohl nicht funktionieren, wenn ich dann noch eine fünfte Row einfügen möchte, die mir nur CheckBoxen (typeof(Boolean)) darstellt zum an oder abwählen der Spalte. Die Typisierung der Spalten lässt das ja nicht zu, da ich bei den oberen 4 Rows mit den Operatoren "double" oder "string" als Spaltentyp festlegen muss.
Dazu muss ich dann ein weiteres DataGrid einfügen, das im Window im gleichen Stackpanel unter dem "SuchGrid" angeordnet ist.

Thema: DataGrid als Suchmaske
Am im Forum: GUI: WPF und XAML

Hi, habe mir das gestern angesehen un dprobiert. Bin immer noch dabei, aber ich raff es nicht. Ich habe ja die View, die auf einer DataTable beruht. Die durchlaufe ich in einer Schleife und hole mir alle Spaltennamen. Gleichzeitig möchte ich diese in die dynamische Klasse eintragen, als Member. Werte brauch ich erst mal keine, aber wenn ich weiss wie ich die auch noch rein krieg ists für sonstige Anwendungen nicht verkehrt.
Ich krieg die Member nicht rein. In dem Besipiel bei MS ist ein Dictionary dabei, das brach ich doch gar nicht. Kannst mir mal einen Ansatz geben?

mal einfach so ein Beispiel:




            dynamic per = new HeliTest();

            for (int i = 0; i < tblHeli.Columns.Count; i++)
            {
                per.SetMember(tblHeli.Columns[i].ColumnName);

            }

Für meine Anwendung müßte eigentlich das ExpandoObject reichen. Aber da seh ich wieder das Problem, wie ich die Spaltennamen als Membernamen in die Klasse bekomme.



          dynamic per = new ExpandoObject();

            for (int i = 0; i < tblHeli.Columns.Count; i++)
            {
                //// Hier muss ich irgendwie den Membernamen rein kriegen
                per[tblHeli.Columns[i].ColumnName] = "";

            }

Nun wie mach ich das, aus dem MS-Code werd ich noch nicht schlau.

Thema: DataGrid als Suchmaske
Am im Forum: GUI: WPF und XAML

Hallo, danke für den Tipp. Das hört sich gut an. Aber eine Klasse anhand der Splatennamen einer SQL-Tabelle habe ich noch nie gemacht. Das wäre ne tolle Sache, könnte ich auch für andere Dinge brauchen. So könt ich mir ne flexible Klasse bauen. Nun das aber: Wie mach ich das dynamisch? Denn es könnte sein, es kommt mal noch ein Feld oder zwei ... dazu.

Thema: DataGrid als Suchmaske
Am im Forum: GUI: WPF und XAML

Hi, ich baue einen SQL-String dynamisch zusammen. Natürlich ist mir klar das ich die Checkboxen abfragen kann und dann das betrefende Feld einach übergehe. Mein Problem ist: Wie kreig ich die CheckBox in das bestehende "Suchmasken-DataGrid" rein! Alle Spalten haben ja schon eine Typisierung. Kann ich das irgendwie machen, das trotzdem Checkboxen in der letztem Zeile angezeigt werden?

Thema: DataGrid als Suchmaske
Am im Forum: GUI: WPF und XAML

Hallo, bin gerade an einem Problem, wo ich nicht genau weiter weiss. Ich habe aus diversen SQL-Tabellen eine View erstellt. Diese rufe ich ab und visualisere diese in einem DataGrid in einem Window. Nun soll aus den vielen Daten gefiltert werden können, was auch schon funktioniert.

Dazu habe ich das identische DataGrid mit der gleichen Tabellenstruktur darunter gelegt, mit einer zusätzlichen Spalte am Anfang vom DataGrid, welche die Suchoperatoren angeben (≥ , ≤ , == , LIKE),und vier Zeilen eingefügt, in welche dann die Daten für die Suchabfrage eingetragen werden können. Wie gesagt, das klappt alles ganz toll.
Jetzt kommts aber. Ich muss das Ding erweitern, weil ich Dateien einlesen soll. Die Werte dieser Datei müssen dann automatisch in die Suchfelder eingetragen werden, und dann soll sofort angezeigt werden, ob Datensätze zu diesen Daten vorhanden sind. Das wäre auch noch nicht das Problem. Aber es soll so sein, das bei dem DataGrid mit den Suchdaten noch zusätzlich eine Zeile rein soll, und dort in jede Spalte eine CheckBox angezeigt wird. Damit kann man dann einfach das Feld für die Suche abwählen, um den Suchbereich vergrößern zu können.
Ich tu mir jetzt schwer mit den CHeckboxen in der Zeile. Meine Tabellenspalten haben ja eine Tyypisierung, und somit kann ich ja da in der letzten Zeile nicht etwa mit "bool" die CheckBoxen erzeugen. Gibts da eine Lösung das ich das in der gleichen Tabelle machen kann, oder muss ich da eine weitere Tabell drunter kleben?

Thema: Datensatz in CodeBehind aus DataGrid auslesen und bearbeiten
Am im Forum: GUI: WPF und XAML

Danke, das geht.

Thema: Datensatz in CodeBehind aus DataGrid auslesen und bearbeiten
Am im Forum: GUI: WPF und XAML

Hallo, habe das getestet, das funktioniert. Habe eine dataTable nur mit der Struktur geklont, diese übergeben. Jetzt habe ich aber noch ein Problem. Ich möchte eine Spalte hinzufügen. das dgeht auch,aber die neue Spalte wird in der Tabelle am Ende angefügt, die soll aber an Spaltenposition 0 in der Tabelle stehen. Kriegs nciht hin, wie bekoome ich das hin?

Thema: DataGrid - Wie komme ich an die selektierte DataGridRow?
Am im Forum: GUI: WPF und XAML

DataGridRow row =

(DataGridRow)dgridname.ItemContainerGenerator.ContainerFromIndex(1);

oder

DataGridRow row = (DataGridRow)dgSuchdaten.Items[0];

Probier mal.

Thema: Datensatz in CodeBehind aus DataGrid auslesen und bearbeiten
Am im Forum: GUI: WPF und XAML

FZelle, danke für den Tipp. Genau das wollte ich hören, wie ich da genau ansetzen muss, das hilft mir weiter.

Thema: Datensatz in CodeBehind aus DataGrid auslesen und bearbeiten
Am im Forum: GUI: WPF und XAML

Ok, dann mal zu meinem Problem. Ich habe eine View von einem SQL-Server vorliegen. In dieser View sind ca. 60.000 Datensätze mit ca. 50 Spalten. Diese Spalten haben Kürzell (Abkürzungen). Diese Kürzell sind nicht Aussagekräftig und denen (also dem Header der Spalte) muss ein Aussagekräftiger Name verpasst werden. Beim Start werden alle Datensätze in ein DataGrid geladen.
Unter dem DataGrid soll ein zweites,identisches DataGrid entstehen, mit 4 Zeilen.
Die erste Spalte von jedem dieser 4 Datensätze muss ein Suchoperator rein (>,<,==, LIKE). Dann kann der User in jede Spalte einen Wert eingeben. Dann drückt er einen Button und ich werte das unter DataGrid aus und setze die Suchabfrage ab. Die gefundenen Daten werden wieder im oberen DataGrid angezeigt.
Mein DataGrid mit den Daten und den neuen Headenamen habe ich schon per XAML erzeugt, das funktioniert. Wie bekomme ich jetzt das zweite nach eurer Idee hin, ohne das Datensätze mit Daten eingestellt weren und die Suchoperatoren drin sind?

Thema: Datensatz in CodeBehind aus DataGrid auslesen und bearbeiten
Am im Forum: GUI: WPF und XAML

Ja, danke erst mal. Ich werde das mal heute abend noch testen. Hast baer nich doch noch einen Tipp, wie ich das Zeug dynamisch reinschreiben kann? Ich meine ich könnte eine Collection erzeugen. Aber da müssen die Headerspalten einer anderen Tabelle rein. Evl. hast eine Idee, sonst probeir ich nochmal.