Wenn ich jetzt userB löschen will, müsste ich eigentlich die entsprechende Zeile in der DB über die id ansprechen. Momentan lösche ich aber die Reihe im Dataset und führe dataAdapter.Update(...) aus.
Wie löschst du die DataRow im DataSet? Wie sieht dein UpdateCommand von dem dataAdapter aus? Du kannst einem SqlCommand als Parameter der name der SourceColumn angeben (in deinem Falle "id"), dann löscht der das auch korrekt. So wie ich das jetzt verstehe, löschst du den Datensatz anhand des Indexes, keine gute Idee.
Poste doch mal den Code des UpdateCommands.
.unreal
Beim DataGridView wirst du mit den beiden Events CellFormatting und CellParsing glücklich. Bei Bindings, mit denen du die Binding-Klasse verwendest, kannst du die Events Binding.Format resp. Binding.Parse verwenden.
edit:
Kleiner Tipp: Wenn du sowieso den CurrencyManager benötigst, dann verwende die BindingSource-Klasse, ist viel konfortabler 🙂
Gruss,
.unreal
Du hast bestimmt ein zwei Methoden, welche Rekursiv die Daten aus der Klasse Datensource auslieset, und die Nodes hinzufügt. Mach in deiner Datensource-Klasse einen Event, sobald sich die Daten ändern. Im Form registrierst du dich bei diesem Event und rufst die Methoden auf, welche das Treeview beglücken.
.unreal
sorry, ich habe mich unklar ausgedrückt.
Poste doch mal etwas Code. Headerfarben usw. sollten da nichts beeinflussen!
.unreal
edit: ist checked wirklich der spaltenname?
wenn du dich mit mysql auskennst, dann kommst du gut voran mit mssql! War bei mir auch so, ist doch wurst ob man TOP oder LIMIT verwendet...
Original von sheitman
oderm uß man da bei mysqlwieder erst was ektivieren?
sollte eigentlich aktiviert sein. oft deaktivieren aber die provider diese funktionalität, da sowieso nur lokal einen zugriff möglich ist.
.unreal
Original von w1z4rd2003
1
2
3
4
5
6
7
1
2
3
4
...
...
...bis zum 20. Datensatz
diese Numerierung ist unmöglich, da Zahlen doppelt vorhanden sind!
Wieso willst du die ersten 20 Updaten? Beschreib mal deine Absicht.
Ich versteh nicht, wie du auf diese Anforderung kommst. Was ist dein Vorhaben? Warum willst du das tun?
Eine Lösung wäre:
Zuerst mit SELECT die 20 letzten ids auslesen (SELECT TOP 20...), anschliessend update WHERE id = id1 or id = id2 usw.
.unreal
Warum sollte es nicht "gehen"? Man kann jedes Property binden!
Hast du es schon mit einem DataBinding auf die SelectedNode versucht?
Wenn ich dem Tablestyle allerdings die Relation als MappingName zuweisen will, wird das Style leider nciht angezeigt.
Bei der GridBoolColumn musst du den PropertyName auf das Attribut der Relation, also der Name der Column mit dem bolschen Wert setzen.
Gruss,
.unreal
Das Treeview mit einer Rekursion zu füllen ist in ein par wenigen Zeilen geschrieben, ich weiss aber genau, was du an DataBinding magst 🙂 Trotzdem würde ich auf eine 3rd-Party-TreeViewWithDataBinding-Klasse verzichten.
.unreal
http://msdn2.microsoft.com/en-us/library/c12c1kx4.aspx müsste dir weiterhelfen.
Der Knackpunkt ist wohl:
The DataMember property of the second BindingSource is set to the DataRelation name. This causes the associated detail DataGridView control to display the rows of the child Orders table that correspond to the current row in the master DataGridView control.
Gruss,
.unreal
doch schon, wird aber sozusagen nie verwendet 🙂
Hallo Fanatic-Design
Nein da irrst du dich nicht! In so einem Fall könntest du ja gleich einen MySQL Server inerhalb eures Netzwerkes installieren. Denk daran, dass die Daten zum MySQL Plaintext durch die Leitung gehen.
.unreal
Ohne DataBinding ist das ziemlich einfach Lösbar, wo ist das Problem?
nur ist deine ip nicht Statisch 🙂 Und was ist, wenn die Applikation von einem anderen Computer aus benutzt wird?
Wenn du die Anwendung immer von einem Computer aus startest, aber keine statische IP hast, dann guck ma utner: http://no-ip.org
.unreal
Original von w1z4rd2003
mein ziel wäre es eben im load meines Fensters alle Values auszulesen.
Die hast du ja in der DataTable, warum willst du diese (nochmals)auslesen ? Die sind ja bereits "da" 🙂. Erklär uns, warum du das willst, wahrscheindlich können wir dir dann viel besser helfen, aber ein drittes mal Frage ich nicht nach.
Gruss,
.unreal
Denke kaum, dass der Hoster dem Server die Beine spreitzt, damit alles rein und raus kann. Aus Sicherheitstechnischen Gründen wird diese remote-Sperre nicht nur Softwaremässig abgesichert sein, sondern auch Hardware.
Guck mal bei MySQL-Front, in deinem Installationsverzeichnis liegt ne php Datei, ich glaube die heisst phpMySQL.php. MySQL Front schickt die Querys an dieses Script, welches das Query lokal auf dem Webserver ausführt und das Resultat in XML zurückschickt. Jetzt brauchst du nur noch zu wissen, wie du dieses Tunnelingscript ansprechen musst. Vieleicht gibts ne Doku, wenn nicht such mal im Internet, vieleicht gabs jemand, der eine solche Schnittstelle programmiert hat. Wenn nicht, dann bleibt dir nur noch eine möglichkeit: schau dir den Code des PHP Scriptes an 🙂
Ich brauche auch eine solche Schnittstelle, aus Zeitgründen konnte ich allerdings mich noch nicht damit beschäftigen. Mein Projekt wäre sicher Open-Source.
Gruss,
.unreal
Muss es ein TreeView sein? Kannst doch auch einfach eine Combobox für die Kategorienauswahl, und ein DataGridview für die Darstellung der Childs verwenden?
.unreal
guck mal bei www.codeproject.com, ich glaube ich hab dort mal eine gesehen, müsste aber selber suchen. Das überlass ich nun aber dir =)
.unreal
Original von JunkyXL
foreach (string value in <ComboBox>.ValueMember) { ... }
Du hast so ein schönes Intellisense, schau dir die Möglichkeiten an.
Jetzt hast du das Value im Zugriff und kannst es ausgeben.
ValueMember wird für das DataBinding benötigt und hat überhaupt nichts mit dem Value eines Items zu tun.
Aber da ich bis jetzt nur die Methode SelectedValue gefunden habe frage ich nach.
SelectedValue ist ein Property und keine Methode
Warum willst du die Values über die ComboBox durchiterieren? Ich bin nicht gerade der ComboBox auskenner, aber ich wage es mal zu behaupten, dass man das gar nicht braucht. Grundsätzlich tut man solche Interaktionen auf der Datenebene. Wie hast du die Daten an die Combobox gebunden? Schau dir mal die Klasse BindingSource an -> "Encapsulates the data source for a form.", mit der kannst du suchen und grübeln nach Lust und Laune 🙂.
Gruss,
.unreal
edit: sorry, hab nicht richtig gelesen =)
.unreal
p.s TreeView unterstützt kein DataBinding, müsstest auf ein 3rd Party Komponente zurückgreifen.
quakenet.de ist zwar eher für gamer, aber diese Server besitzen schon einige Programmierchannels, wie #php.de #c++.de #java.de #java #c usw.!
.unreal
Was soll denn diese Methode machen? Verstehe nicht warum du eine Methode willst, für sowas sind doch Collections?
.unreal
Die Antwort steht im von Herbivore geposteten Thread!
.unreal
count(b.id)
und nicht das GROUP BY (K.id) vergessen
.unreal
Finde ich eigentlich ne super Sache mit den 64kb Demos, wenn man genug Zeit hat 🙂 Aber .NET ist nicht wirklich für sowas geeignet.
Original von FZelle
Viel besser wären natürlich Parameter
Noch besser wären DataAdapters =) Wenn man schon mit einem DataGrid/DataGridView arbeitet sind die DataAdapters am effizientisten.
.unreal
Hi Tomtom62
Was meinst du genau mit "speichern"? Grundsätzlich gibt es zwei verschiedene Synchronisierungen: Von der Benutzereingabe zur DataTable, und von der DataTable in die Datenbank.
Wenn du Eingaben Validieren willst, dann Verwende die Validate Methoden des jeweiligen Controls.
Die SqlDataAdapterklasse synchronisiert deine DataTable mit einer Datenbank. Diese Klasse stellt folgende Events zu Verfügung: RowUpdated, RowUpdating und FillError.
Gruss,
.unreal
Wenn du eine Childdatensätze anzeigst, musst du irgendwo definiert haben, wer der Vater ist und bindest diese eigenschaft an deine Textbox. Ich habe dir einen Artikel gepostet, da steht wie man das ohne Designer macht, sollte eigentli ableitbar sein? Ich kenn mich mit dem Designer nicht aus, sorry.
Ansonsten poste doch mal etwas code.
.unreal
ich zitiere herbivore von "Scrollen im Datagridview"
gedacht oder ausprobiert?
.unreal
Original von herbivore
Aber im Ernst: Die andere Hälfte gucke ich in der Doku nach.
du bringst mich immer wieder zum schmunzeln 😃
sorry, bei den Typed DataSets kann ich dir nicht direkt helfen, ich lass immer die Finger vom Drag&Drop.
Ich nehme aber trotzdem an, dass du ein BindingSource hast? Mit BindingSource.Find("nummer", txtNummer.Text) kommst du an den Index ran, und mit BindingSource.Position setztst du den "Cursor".
.unreal
Was hast du an das DataGridView gebindet? Am besten wäre ein BindingSource, da müsstest du nur BindingSource.EndCurrentEdit() aufrufen!
Ansonsten musst du an den CurrencyManager ran:
((CurrencyManager).BindingContext[_dataGridView, "Tablename"]).EndCurrentEdit();
Im CellValidating Event überprüfst du, ob die Eingabe des Benutzers in Ordnung ist. Ich mache im CellEndEdit-Event folgendes:
_dataGridView.Rows[e.rowIndex].ErrorText = String.Empty;
So kann man das Editieren/Hinzufügen mit der Escapetaste abbrechen, und die Fehlermeldung kommt nimmer. Ansonsten musst du das Form.AutoValidate wie bereits erwähnt anpassen.
Gruss,
.unreal
vieleicht ist MaxLength auf 1000 das was du suchst?
.unreal
Bei der MSDN suche gebe ich "display data datagridview" ein, der dritte Treffer: "Displaying Data in the Windows Forms DataGridView Control". Dort findet man viele Howtos, Walktrhougs und weitere Links.
Ich helfe gerne, solange ich sehe, dass der Fragende auch etwas gemacht hat.
.unreal
Können ja, tun denke ich nicht! Warum guckst du nicht selbst in die MSDN? Da hats hunderte von Beispielen über die DataGridView.
Gruss,
.unreal
Ich habe es über das BindingSource gelöst:
If _bsResources.Current.Row.RowState = Data.DataRowState.Detached Then
.... überprüfen und so
End If
Lustigerweise ist dgvResources.Rows(e.RowIndex).IsNewRow immer False, weil vor dem Validieren gleich ne neue Row im DataGridView erzeugt wird, da sehe ich den Sinn nicht ganz dahinter!
Scheint mir etwas komisch, dass man solche umwege gehen muss, wäre darum trotzdem noch froh, wenn jemand seine Ideen posten würde.
.unreal
Hallo Community
Ich habe ein Problem mit dem CellValidating Event des DataGridView. Der Code ist leider in VB.NET, ich poste diesen trotzdem hier, obwohl mycsharp eine C# Seite ist, da dieses Forum einfach nur super ist 🙂
Private Sub dgvResources_CellValidating(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellValidatingEventArgs) Handles dgvResources.CellValidating
If (dgvResources.Columns(e.ColumnIndex).Name = "resource") Then
If (_bsResources.Find("name", e.FormattedValue) > -1) Then
dgvResources.Rows(e.RowIndex).ErrorText = "Diese Anwendung ist bereits vorhanden."
e.Cancel = True
Else
dgvResources.Rows(e.RowIndex).ErrorText = String.Empty
e.Cancel = False
End If
End If
End Sub
Bei diesem Code kriege ich eine InvalidOperationException mit dem Text "Operation did not succeed because the program cannot commit or quit a cell value change."
Warum lässt sich sich einen Cell-Value nicht verändern?! Sobald der ausgewählte Wert nicht vorhanden ist, wird e.Cancel auf false gesetzt. Falls ESC gedrückt wird, habe ich im CellEndEdit event den error der row auf "" gesetzt.
Der Benutzer soll über eine ComboBox aus einem Applikationsppol eineauslesen können, allerdings darf jede nur einmal hinzugefügt werden. Ich dachte ich packe diese Validierung in den CellValidating Event. Ist das der falsche Weg?
Gruss,
.unreal
XXXDataAdapter.Update() guckt selber, obs nun ein Insert/Update/Delete ist, brauchst lediglich die verschiedenen Commands zuzuweisen, und anschliessend die Update() Methode aufrufen.
Brauchst dich also nicht darum zu kümmern, wenn du dies aber trotzdem willst, dann guck dir mal die RowState der DataRows von DataSet.GetChanges() an!
.unreal
Hi HarriHarri
Hast du denn nirgends eine Masterview, wo der Autor ausgelesen wird?
Wenn du nur eine Liste mit allen Büchern hast, dann musst du den Autorennamen im SQL-Statement auch abfragen, diesen Bindest du aber nicht an das DataGridView sondern nur an die Textbox.
Gruss,
.unreal
http://msdn2.microsoft.com/en-us/library/y8c0cxey.aspx
Gruss,
.unreal
((CurrencyManager)BindingContext[myDataSet, "DataTablename"]).EndCurrentEdit()
je nach Binding musst du mittels
BindingContext[myDataSet.Table["Tablename"]]
an den CurrencyManager rankommen. Ich kapier den unterschied leider auch noch nicht ganz 😦, aber die beiden CurrencyManager sind nicht gleich.
Gruss,
.unreal
Lösung:
Papersource-Klasse --> QueryPageSettings Event vom PrintDocument.
Gruss,
.unreal
Hallo
Per PrintDocument wird gedruckt. Ist es möglich, das Fach des Druckers programmatisch (sprich ohne Printer-Dialog) auszuwählen, damit automatisch von einem nicht Standardfach gedruckt wird?
In PrinterSettings Klasse habe ich nichts gefunden.
Gruss,
.unreal
Kleiner Tipp am Rande: wenn du VS 2005 verwendest, und nen EventHandler nicht auswenidg kennst, warte nach dem += auf die IntelliSense oder drück tab.
.unreal
Kommt ganz drauf an, wo du den neuen Datensatz anlegen willst. Ist es z.B. vom Form aus, würde ich das DataView verwenden, da dann z.B. kein CurrencyManager.Refresh() verwendet werden muss. Um Daten aus einer DB in diese DataTabe zu füllen käme einen DataAdapter.Fill() zum einsatz.
Wenn eine ADS vorhanden ist, sollte man mit dem Windows-Benutzer arbeiten.
ersetzen kannst du nur, wenn die länge des Ersatzes identisch zur Länge des zu ersetzenden ist.
versteh ich nicht: String.Replace("kurz", "jetzt isses aber gaaanz doll lang")