Hallo ich versuche jetzt schon seid knapp 2 Stunden aus einem DataGrid bestimmte werde aus Zellen ausgeben zu lassen und diese mit einander zu vergleichen und wenn eine bestimmte Bedingung erfüllt ist soll eine weitere spalte erstellt werden die dann entweder Grün oder Rot ist. das ganze soll zeile für Zeile passieren. Ich habe mal in ein Bild erstellt wie es denn am ende aussehen soll. Das angehängte Bild ist nur ein Beispiel. Ich hatte das schon so in der Idee das man es über die LoadingRow Methode macht damit dann Zeile für Zeile die daten überprüft werden können und sich dann so endschieden wird ob in der letzten spalte die Zelle rot oder grün angezeigt werden soll. Mein Problem liegt eher dabei wie ich mir überhaupt erstmal diese daten ausgeben lassen kann. Ich erwarte nicht von euch das ihr mir die ganze Methode programmiert sondern einfach nur ein wenig Hilfe da ich im Internet leider nichts passendes gefunden habe.
Wenn das ein Datagridview von VB ist, ist das einfach. rowi = gg_st.CurrentCell.RowIndex ' fragt die aktuelle Zelle ab kenn_nr = gg_st.Rows(rowi).Cells(1).Value - gibt den Wert der ZWEITEN Spalte der aktuelle Zelle aus. gg_st.Rows(rowi).Cells(1).Style.BackColor = Color.Blue <- setzt den Hintergund der Zelle blau. ;) Wie gesagt, das gilt für Visual-Basis + vermutlich auch für Visual.net. Ansonsten denk mal an die Salami und gibt die Infos nicht in dünnen Scheiben.
Jonas N. schrieb: > soll eine > weitere spalte erstellt werden die dann entweder Grün oder Rot ist Das geht nicht wirklich. Du musst die Spalte grundsätzlich erstellen. Und dann halt die Zelle in der Spalte nach deiner Bedingung " füllen ". Wie in deinen Beispiel. Also mit einer Schleife die Zeilen (rows) abfragen und dann was machen Flatterrand ist NICHT möglich. ;)
Naja also momentan fülle ich das DataGrid mit dieser Methode: private void datenbankanzeige() { string constring = "datasource=localhost; port=3306; username=root; password="; string Query = "SELECT attributenames.PK_ID_attributename AS 'ID#', attributenames.attribute_name AS 'ATTRIBUTE_NAME', attributevalues.valuevalue AS 'VALUE', attributeworsts.worstvalue AS 'WORST', attributethreshs.threshvalue AS 'THRESH', attributewhen_faileds.when_failedvalue AS 'WHEN_FAILED', attributeraw_values.attribute_valuevalue AS 'RAW_VALUE' FROM smartcontrol.attributenames INNER JOIN smartcontrol.attributevalues ON attributevalues.FK_ID_attributename = attributenames.PK_ID_attributename INNER JOIN smartcontrol.attributeworsts ON attributeworsts.FK_ID_attributename = attributenames.PK_ID_attributename INNER JOIN smartcontrol.attributethreshs ON attributethreshs.FK_ID_attributename = attributenames.PK_ID_attributename INNER JOIN smartcontrol.attributewhen_faileds ON attributewhen_faileds.FK_ID_attributename = attributenames.PK_ID_attributename INNER JOIN smartcontrol.attributeraw_values ON attributeraw_values.FK_ID_attributename = attributenames.PK_ID_attributename INNER JOIN smartcontrol.harddisks ON harddisks.PK_harddisk = attributevalues.FK_harddisk INNER JOIN smartcontrol.cases ON cases.PK_case = harddisks.FK_case AND harddisks.PK_harddisk = attributeworsts.FK_harddisk AND harddisks.PK_harddisk = attributethreshs.FK_harddisk AND harddisks.PK_harddisk = attributewhen_faileds.FK_harddisk AND harddisks.PK_harddisk = attributeraw_values.FK_harddisk WHERE cases.PK_case LIKE '" + anzeige_gehaeuse + "';"; MySqlConnection conDataBase = new MySqlConnection(constring); MySqlCommand cmdDataBase = new MySqlCommand(Query, conDataBase); try { MySqlDataAdapter sda = new MySqlDataAdapter { SelectCommand = cmdDataBase }; DataTable dbdataset = new DataTable(); sda.Fill(dbdataset); BindingSource bSource = new BindingSource { DataSource = dbdataset }; showData.ItemsSource = bSource; sda.Update(dbdataset); } catch (Exception ex) { System.Windows.MessageBox.Show(ex.Message); } } denkst du es ist dennoch irgenwie möglich?
Jonas N. schrieb: > Nein es geht um das DataGrid aus C# Vielleicht solltest du erst einmal die Grundlagen lernen. C# ist nur eine Sprache. Das Framework heißt .net und ob du VB oder C# nutzt, ist völlig irrelevant...
Beitrag #6697854 wurde vom Autor gelöscht.
Michael schrieb: > Vielleicht solltest du erst einmal die Grundlagen lernen. C# ist nur > eine Sprache. Das Framework heißt .net und ob du VB oder C# nutzt, ist > völlig irrelevant... Ich will mal hoffen das du nicht mich gemeint hast. Ich kann VB im Schlaf. Und ich übersetzte den Code von C# immer in VB. ABER, ich mache keine Aussage wo ich mir nicht sicher bin das sie funktionieren. Und es wäre möglich da das Datagrid unter c# seine Eigenheiten hat. Mit den Kalender-Modul habe ich schon Stress gehabt wegen so "Eigenheiten". Mein Code oben in C# umzuwandeln ist leicht wenn man C# kann. Davon abgesehen @TO würde ich das alles ganz anderes machen. Ich würde das Datagrid in der Form anlegen was die anzahl der SPALTEN angeht, und auch den normalen Style. Name = gg ;) Dann in einer Schleife die daten einlesen, und den Grid zuweisen. das geht dann so. Zeile = -1 do while Daten = da Zeile= Zeile +1 gg.rows.add (1) ' legt eine neue Zeile an gg.Rows(Zeile).Cells(0).Value = eingelesene_daten_zeile_1_spalte_1 loop Der Code muss nur noch um die Enleseroutine der Quelle erweitert werden. Wie gesagt das geht in C# genau so. Ich habe nur etwas Probleme mit der Syntax und den unzähligen Klammern. Sorry
Schlaumaier schrieb: > Wenn das ein Datagridview von VB ist, ist das einfach. > > rowi = gg_st.CurrentCell.RowIndex ' fragt die aktuelle Zelle ab > kenn_nr = gg_st.Rows(rowi).Cells(1).Value - gibt den Wert der ZWEITEN > Spalte der aktuelle Zelle aus. > Hast du eine Ahnung was ich statt RowIndex und Rows verwenden soll?
So geht übrigens das einlesen via SQL von einer Access-Datenbank. Bei einer Anderen Datenbank sie die folgenen 2 Zeilen anzupassen. Ich mache das auch mit z.b. sqlite-Datenbanken. Dann muss aber in der IDE das SQL-Modul importiert werden. dim dbpath As String = System.IO.Path.Combine(Application.StartupPath, "daten.mdb") dim conn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & dbpath & ";") Dim cmd As New OleDbCommand(sql, conn) Dim da As New OleDbDataAdapter(cmd) Dim ds As New DataSet cmd.CommandText = "select * FROM " + tabelle$ + " where nr = " + Str(kenn_nr) da.Fill(ds, tabelle$) Dim row As DataRow Dim dt As DataTable = ds.Tables(tabelle$) For Each row In dt.Rows feld$ = "Name_1" : If Not DBNull.Value.Equals(row(feld$)) Then wert$ = row(feld$) Else wert$ = "" next Dann steht in Wert$ der Wert des Feldes Name_1. Falls du dich über die seltsame Einlesemethode wunderst. Wenn in ein Feld den Absolute_NULL Wert hat, führt das sonst zum Absturz. So wird dieser Zustand geprüft.
Jonas N. schrieb: > Hast du eine Ahnung was ich statt RowIndex und Rows verwenden soll? NEIN. Das sind Eigenschaften. Gib in deiner IDE einfach ein . <-punkt ein, und er listet die dir auf. https://docs.microsoft.com/de-de/dotnet/api/system.windows.forms.datagridview.rows?view=net-5.0 Lies mal den Text z.b. Das ist übrigens C# Code. Wie gesagt mich nerven die Klammern ;)
Ich vermute mal du das das Datagridview nicht deklariert. Ich mache das in den ich es einfach PASSEND auf die Form ziehe und ihm den passenden Namen geben (bei mir immer gg aber das ist wurst, Vorgabe ist Datagridview1 )
Schlaumaier schrieb: > Ich mache das in den ich es einfach PASSEND auf die Form ziehe und ihm > den passenden Namen geben (bei mir immer gg aber das ist wurst, Vorgabe > ist Datagridview1 ) Es ist ein unterschied ob man eine Forms oder WPF Application nimmt, unter wpf ist es einfach DataGrid. Benutze als Namen aber showData, der Name war eigentlich auch nur als Platzhalter gedacht und wird später in etwas passenderes geändert. Finde übrigens leider nicht die passenden Eigenschaften.. So langsam bin ich echt frustriert.. :(
:
Bearbeitet durch User
Fuer so Sachen nutzt man eigentlich converter, statt dies im code-behind einzumassieren. Cheers, Roger
Roger S. schrieb: > Fuer so Sachen nutzt man eigentlich converter, statt dies im code-behind > einzumassieren. Naja, Es kommt auf die Auswertung an. Da ja eine SQL-Tabelle vorliegt, und wenn du Auswertung kompliziert ist, geht es ohne Converter prima. Weil was will man besseres als eine SQL-Datei. ;) Ich gehe i.d.R. andersherum vor. Ich ziehe die unterschiedlichen Datenstrukturen in eine SQL-Datei. Und mache dann die Abfragen. Das Ergebnis kommt dann in die Tabelle. Sieh Code oben. ;) Aber der TO hat ja schon ne Sql-Datei. ;)
Schlaumaier schrieb: > Naja, Es kommt auf die Auswertung an. Da ja eine SQL-Tabelle vorliegt, > und wenn du Auswertung kompliziert ist, geht es ohne Converter prima. Das einfaerben einer Zelle geht halt nun mal am besten mit einem converter. > Weil was will man besseres als eine SQL-Datei. ;) SQL-Datei? Was soll das sein? > Ich gehe i.d.R. andersherum vor. Ich ziehe die unterschiedlichen > Datenstrukturen in eine SQL-Datei. > Und mache dann die Abfragen. Das Ergebnis kommt dann in die Tabelle. Es ist halt nicht grad 'best practice' ein result set mittels for-loop im code behind nochmals durchzuackern und im Zweifelsfall noch weitere Kolumnen/Zeilen anzuhaengen. Kann man machen.. Jedem das Seine. > Sieh Code oben. ;) Gibt mehr code da oben als man das eindeutig identifizieren koennte. Cheers, Roger
Roger S. schrieb: > SQL-Datei? Was soll das sein? Naja SQL-Datenbank halt. Datei ist alles ;) Ich mache eine Abfrage besagter Datenbank. Damit ich nur die Sätze bekomme die mich interessieren. Nun ziehe ich diese (gefilterten) Sätze via For-Next schleife in das Datagrid VIEW und gebe wie der TO das will , das Ergebnis der Analyse in der letzten Spalte aus. z.b. Rot wenn ein gewisser Wert unterschritten ist, grün wenn nicht. Das ganze ist NUR eine temporäre Anzeige. Deshalb heißt das Teil auch VIEW im Namen. Da der TO in seinen Code eine Connection zu einer SQL-Datenbank aufmacht gehe ich davon aus der ein eine hat. Sollte es sich bei den Daten aber um Abfragen handeln die das Ergebnis vom EINMALIGEN AKTUELLEN Auslesen von SMART-Werten sind (darauf lässt der Text schließen) dann kann man sich das SQL-Zeug sogar sparen. Dazu einfach das Datagridview UNBOUND anlegen. Dann hat man eine nackte Tabelle. Man füttert sie mit Daten via Direktzuweisung, und hat als Ergebnis eine schnelle und chice Anzeige. Nicht mehr und nicht weniger. Mache ich manchmal wenn ich zu faul bin jede Menge Text/Label-Felder anzulegen. ;)
Schlaumaier schrieb: > Roger S. schrieb: > Nun ziehe ich diese (gefilterten) Sätze via For-Next schleife in das > Datagrid VIEW und gebe wie der TO das will , das Ergebnis der Analyse > in der letzten Spalte aus. z.b. Rot wenn ein gewisser Wert > unterschritten ist, grün wenn nicht. Eben, das kann man sich sparen und in der anzeige machen denn: Beitrag "Re: C# Wpf DataGrid daten Zeile für Zeile ausgeben" > Das geht nicht wirklich. > Du musst die Spalte grundsätzlich erstellen. Und dann halt die Zelle in > der Spalte nach deiner Bedingung " füllen ". Wie in deinen Beispiel. Stimmt nicht, wie in meinem Beispiel gezeigt kann man sehr wohl Spalten erstellen die es nur in der Anzeige und nicht in der Datenquelle gibt. --- Es gibt verschiedene Wege ans Ziel, man kann es auch in die SQL Abfrage mit rein nehmen, und die Datenbank die klassifizierung machen lassen. Cheers, Roger
Schlaumaier schrieb: > Michael schrieb: >> Vielleicht solltest du erst einmal die Grundlagen lernen. C# ist nur >> eine Sprache. Das Framework heißt .net und ob du VB oder C# nutzt, ist >> völlig irrelevant... > > Ich will mal hoffen das du nicht mich gemeint hast. Ich kann VB im > Schlaf. Und ich übersetzte den Code von C# immer in VB. > > ABER, ich mache keine Aussage wo ich mir nicht sicher bin das sie > funktionieren. Und es wäre möglich da das Datagrid unter c# seine > Eigenheiten hat. Kompletter Unsinn. Michael hat vollkommen Recht. Bei der Benutzung irgendwelcher Controls spielt es absolut keine Rolle, ob man den Kram in C# oder VB.net schreibt. Ist ja auch logisch: Das Control ist doch dasselbe. Und die Sprachen sind (hinter den Kulissen) auch sehr eng miteinader verwandt, die auf der "Oberfläche" benutzte Sprache ist ja nur ein Frontend für die tatsächlich benutzte Sprache und die ist in beiden Fällen dieselbe. Der einzige Unterschied ist, dass ein VB.net einige Features nicht verfügbar sind, die es im C#-Frontend gibt. Das allerdings sind Sachen, die man zum Zugriff auf Controls weder braucht noch benutzt. > Mein Code oben in C# umzuwandeln ist leicht wenn man C# kann. Um irgendwas wandeln zu können, muss man schlicht beides können. So wie ich...
c-hater schrieb: > Um irgendwas wandeln zu können, muss man schlicht beides können. So wie > ich... Es geht nicht um Code selbst, es isst die reine Syntax. In meinen Beispiel muss er halt nur die For-Next schleife in C anpassen und jede Menge Klammern verteilen. Aber in einen gebe ich dir Recht. Die Sprachen nähern sich immer mehr. Weshalb meine Aussage um so genauer ist. Bloß da mich die Erfahrung gelernt hat, das MS gerne schon mal an "Kleinigkeiten" bastelt die dann böse Auswirkungen haben, bin ich mit Aussagen die ich nicht beweisen kann vorsichtig.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.