Laden...

Forenbeiträge von wlfmario Ingesamt 12 Beiträge

03.01.2020 - 15:12 Uhr

Das habe ich versucht nur leider stehe ich da noch auf dem Schlauch.

<DataGrid x:Name="StandID" ItemsSource="{Binding}" Height="Auto" VerticalAlignment="Top" Grid.Row="1" SelectedItem="{Binding StandID}" >

Wenn ich jetzt aber die StandID auslesen möchte, hapert es .


private void _Löschen_Click(object sender, System.Windows.RoutedEventArgs e)
        {
            int sid = StandID ??????????????????
        }

02.01.2020 - 01:15 Uhr

Hallo zusammen und ein Frohes neues Jahr.

Ich brauchte da mal ein kleinen Gedankenanstoß, der bestimmt wieder Simpel zu lösen ist.

Und zwar habe ich ein DataGrid das ich mit Daten aus der DB befülle, die ID wird zwar gelesen aber nicht angezeigt.


<DataGrid.Columns>
                <DataGridTextColumn Header="StandID" Binding="{Binding StandID}" Visibility="Hidden" />
                <DataGridTextColumn Header="Bezeichnung:" Binding="{Binding StandBezeichnung}" Width="200" IsReadOnly="True" />

Jetzt möchte ich für eine SQL Anweisung die StandID in eine Variabel Speichern von dessen Reihe die Markiert ist.

Ich habe Heute schon so einiges versucht und gelesen, doch irgenwie komme ich nicht an das Ergebnis.

Daher brauchte ich mal so ein kleinen Anstoß in die richtige Richtung.

25.12.2019 - 23:45 Uhr

Ich weiß viele Wege führen nach Rom aber da ich zur Zeit noch in der Lernphase bin, mache ich mir Code Technisch hier und da meine Gedanke um Fehler direkt auszumerzen.

Im meine WPF-Projekt binde ich über Frames verschiedene Seiten ein, auf denen Versch. Tabellen aus einer Datenbank angezeigt werden.

Jetzt könnte ich zwar in jedem C#-Code der Seiten den Code Einfügen:


...
 try
            {
                string sql = "SELECT * FROM TabellenName";
                SQLiteConnection con = new SQLiteConnection("Data Source = MyDatenbank.DB; Version=3;");
                DataSet MyDataSet = new DataSet();
                SQLiteDataAdapter dataAdapter = new SQLiteDataAdapter(sql, con);
                dataAdapter.Fill(MyDataSet);
                this.DataContext = MyDataSet.Tables[0].DefaultView;
                con.Close();
            }
            catch
            {
...

aber da habe ich irgendwie das Gefühl das ich X-mal eine Connection öffne und hunderte von Zeilen Code umsonst geschrieben werden.

Die zweite Idee die ich hatte, war die Zeilen in eine Klasse (Methode) auszulagern und in jeder C#-Datei wo es benötigt wird, dort ein Object zu erstellen.
Ok. es werden genau so viele Connection geöffnet und geschlossen aber der Code wird um einiges Weniger und Übersichtlicher.

Meine Frage nun:
Kann ich das mit ruhigen Gewissen so über eine Methode in eine Klasse machen oder gibt es dort Fallstricke die ich beachten muss ?

Gibt es andere Möglichkeiten die ich noch nicht in betracht gezogen habe ?

Danke schon einmal für eure Antworten.

23.12.2019 - 15:06 Uhr

Ok. ich denke es hat sich Erledigt !
Man muss das wohl auch in der C# Datei der Seite machen und in einer anderen ! 😄

23.12.2019 - 14:47 Uhr

Danke für den Hinweis, da werde ich mich mal Einarbeiten müssen.
Bei den ersten Gehversuchen, stoße ich noch auf ein kleines Problem bei dem ich keine Antwort finde.

Ich binde eine xaml-Seite über ein Frame in mein Window ein:

 <Frame x:Name="frame" Content="Frame" Width="Auto" Padding="5" Margin="5" Background="AliceBlue" Uid="Frame" Source="Start.xaml"/>

in der Seite (Start.xaml) habe ich ein DataGrid eingefügt:

<Grid>
        <DataGrid x:Name="dataGrid" ItemsSource="{Binding}" AutoGenerateColumns="True" Uid="dataGrid"/>
    </Grid>

Wie muss ich jetzt genau verfahren, damit sich das DataGrid mit Daten füllt ?
Wenn ich ein DataGrid direkt auf mein Window packe, funktioniert das mit diesem Code:

DataSet MyDataSet = new DataSet();
            SQLiteDataAdapter dataAdapter = new SQLiteDataAdapter(sql, con);
            dataAdapter.Fill(MyDataSet);
            this.DataContext = MyDataSet.Tables[0].DefaultView;

Allerdings funktioniert das nicht mit der DataGrid im Frame.
Wie kann man dies Realisieren ?
Besser wie binde ich das DataGrid aus der Start.xaml mit den Daten ?

22.12.2019 - 18:09 Uhr

Ich hatte die Idee eine Methode in eine Klasse zu schreiben , mit der ich Inhalte in verschiedenen DataGrid laden kann ohne jedesmal das gleiche zu schreiben bei mehreren DataGrid's im Projekt.

Erklärung:
Ich habe xaml Datei Namens Start auf der ich ein DataGrid eingefügt habe.

... 
    Title="Start">

    <Grid>
        <DataGrid x:Name="dataGrid" />
    </Grid>
...

Auf dieses DataGrid und Später auch auf andere möchte ich aus meiner Klasse mit einer Methode zugreifen und dabei das angesprochene DataGrid mit übergeben.

Meine erste Idee sieht wie folgt aus:


 public void UpdateDataGrid(DataGrid DGName, SQLiteConnection con, string sql)
        {
            DataSet MyDataSet = new DataSet();
            SQLiteDataAdapter dataAdapter = new SQLiteDataAdapter(sql, con);
            dataAdapter.Fill(MyDataSet);
            DGName.ItemsSource = MyDataSet.Tables[0].DefaultView;
        }

Leider funktioniert das nicht so, da ich irgendwie nicht auf das DataGrid zugreifen kann bzw. mit übergeben kann.

Kann mir jemand erklären wie ich diese Methode erstellen muss damit sie Funktioniert besser auf was ich achten muss ?

Danke schon einmal für eure Antworten.

25.01.2019 - 23:26 Uhr

Ich brauchte mal einen kleinen Schupps in die richtige Richtung !
In meinen kleine Projekt empfange ich Daten vom Adruino, von denen ich gerne drei Wörter Filtern möchte.
Die Daten werden in einer Variabel gespeichert und später in einer TextBox ausgegeben.
Alles soweit kein Problem auch das finden der drei Wörter macht keine Probleme nur wenn die Daten per Serial gelesen werden und das Event ausgelöst wird, möchte ich testen ob die Wörter "Grbl, ok, error" im String vorhanden sind und darauf reagieren.

Das Problem ist jetzt, das nach jeden absetzen einens Befehls an die Serielle Schnittstelle der Adruino mit ok oder Error Antwortet und dies eine Dauerschleife auslöst.

Wie könnte ich dies am besten umgehen so das ich nach jedem ok. ein neuen Befehl senden kann ?


private String rxstring;
        private void SerialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            rxstring = serialPort1.ReadExisting();
            Invoke(new EventHandler(DisplayTxt));
        }


private void SerialSend(string gcode)
        {
            RichTextBoxOutput.AppendText("> " + gcode + "\n");
            serialPort1.WriteLine(gcode);
        }


 private void DisplayTxt(object sender, EventArgs e)
        {
            RichTextBoxOutput.AppendText(rxstring);
            RichTextBoxOutput.ScrollToCaret();

            bool checkerror = rxstring.Contains("error:");
            bool checkok = rxstring.Contains("ok");
            bool checkgrbl = rxstring.Contains("Grbl");

            if (checkgrbl)
            {
                SerialSend("$G");
            }

            if(checkok)
            {
                SerialSend("$$");
            }
...

14.12.2018 - 23:32 Uhr

Mit


private void DisplayTxt(object sender, EventArgs e)
        {
            RichTextBoxOutput.AppendText(rxstring);
            RichTextBoxOutput.ScrollToCaret();
        }

private String rxstring;
        private void SerialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            rxstring = serialPort1.ReadExisting();
            Invoke(new EventHandler(DisplayTxt));
        }

schreibe ich ich die empfangenden Daten in eine RichTextBox.
Nach dem Start vom Adruino (Reset) gibt die CNC Firmware einen Text aus in etwa** "Gbrl V1.x ['$' for Help]"**
Diesen Text könnte ich zwar Filtern allerdings wenn dieser mal geändert wird, macht das Programm eben nur Mist.
Daher meine Frage ob man das irgenwie intelligenter abfragen könnte.

14.12.2018 - 15:17 Uhr

Ich habe jetzt noch einmal getestet und bemerkt das dass

serialPort1.WriteLine("$$");

noch vor den starten der Gbrl Software auf dem Adruino gesendet wird.
Daher denke ich mal kommt auch weiter keine Antwort vom Adruino.
Ich müsste testen ob die Software auf dem Adruino gestartet ist oder ob die Seriale Schnittstelle fertig ist nach dem ersten Lesen der Daten.

Wie kann man dies am besten bewerkstelligen ?
Wenn der Adruino gestartet ist, erscheint in in einer ComoBox der Text "Gbrl usw." ob es Ratsam ist nach dem Text zu suchen und dann serialPort1.WriteLine("$$"); aufzurufen oder wie könnte ich dies abfragen ?

10.12.2018 - 20:37 Uhr

Leider bringt das Flush auch nichts.
Nur wie schon geschrieben im Click Ereignis eines Buttons oder ähnlich funktioniert es !

10.12.2018 - 15:50 Uhr

In Verbunden() werde nur Buttons Aktiviert oder Deaktiviert!
serial1.Flush(); gibt es leider bei mir nicht bzw. kennt es nicht.

09.12.2018 - 22:51 Uhr

Hallo zusammen,
ich beschäftige mich erst seit kurzem mit C# und etwas Java daher nicht gleich schimpfen wenn ich evtl. den falschen Suchbegriff verwendet habe. 😉

Jetzt aber zu meinen kleinen Problemchen !
Ich habe mich etwas mit dem SerialPort beschäftigt und eine kleine Übungsanwendung in der MFC
Umgebung geschrieben.
Wenn ich jetzt etwas über den SerialPort senden möchte, habe ich das meist über Buttons ect. gemacht, was bis jetzt auch immer gut Funktioniert hat.
Nur wenn ich aus dem Programm heraus bsp. einer Funktion etwas senden möchte, bekomme ich werder eine Fehlermeldung noch wird mir das Ergebnis angezeigt.
Es geht genauer um die Zeile "serialPort1.WriteLine("$$");" im Code die nach dem Absenden Einstellungen zurück gibt.
Wenn ich diese in ein Click-Ereignis packe, funktioniert es.
Kann mir jemand erklären warum dies nicht Funktioniert ?
Danke schon Einmal für eure Antworten.


...
 try
                {
                    serialPort1.BaudRate = Convert.ToInt32(ComboBoxBaud.Text);
                    serialPort1.PortName = ComboBoxPort.Text;
                    serialPort1.Parity = Parity.None;
                    serialPort1.StopBits = StopBits.One;
                    serialPort1.DataBits = 8;
                    serialPort1.Handshake = Handshake.None;
                    serialPort1.RtsEnable = true;
                    serialPort1.DtrEnable = true;
                    serialPort1.ReadTimeout = 500;
                    serialPort1.WriteTimeout = 500;
                    serialPort1.Open();
                }
                catch (Exception e) { MessageBox.Show("Fehler !\n" + e.Message, "Verbindungs Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error); }

                if (serialPort1.IsOpen)
                {
                    Verbunden();
                        serialPort1.WriteLine("$$");
                }
            }

        }

        private String rxstring;
        private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            rxstring = serialPort1.ReadExisting();
            Invoke(new EventHandler(DisplayTxt));
        }
...