| Autor |
Beitrag |
Talemantros
      
Beiträge: 444
Erhaltene Danke: 2
Win7 Proff 64bit
C# (VS2013)
|
Verfasst: Mi 29.04.15 11:36
Hallo zusammen,
ich möchte gern eine Spalte in einem DataGrdiView editierbar machen!
Gefunden habe ich im Netz immer wiederkehrend sowas
C#-Quelltext 1: 2:
| dgvUebersicht.EditMode = DataGridViewEditMode.EditOnKeystrokeOrF2; dgvUebersicht.Columns[5].ReadOnly = false; |
Leider funktioniert dies nicht.
Habe ein wenig rum probiert ohne Ergebnis.
Hat jemand eine Idee?
Vllt noch eine Frage, Wenn eine Spalte bzw. Zelle editiert wurde soll eine Methode starten.
Welches Ereignis sollte ich da nehmen: CellEndEdit?
|
|
Ralf Jansen
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Mi 29.04.15 12:44
Das DataGridView selbst steht auf ReadOnly?
| Zitat: | | Welches Ereignis sollte ich da nehmen: |
Kommt drauf an. Soll im Anschluss was UI nahes passieren? Dann ein GridEvent wie CellEndEdit oder wenn man zeilenweise denkt RowValidating/RowValidated bzw. in DataBinding Umfeld BindingSource.CurrentItemChanged.
Wenn es um etwas datennahes geht (Businesslogik) dann nimm eher ein Event das auch an den Datenklassen hängt und nichts aus der UI.
|
|
Talemantros 
      
Beiträge: 444
Erhaltene Danke: 2
Win7 Proff 64bit
C# (VS2013)
|
Verfasst: Mi 29.04.15 13:08
Hallo Ralf,
das DGV stand auf ReadOnly = true
Habe es jetzt auf false gesetzt und dann über den Quellcode die anderen Spalten nachträglich gesperrt.
Dann würde es gehen.
Es soll etwas UI nahes passieren. Eine Neuberechnung eines Preises anhand des eingegebenen Einzelpreis.
Danke für den Hinweis, dass hier mehrere in Frage kommen, soweit habe ich noch nicht gedacht.
Vielen Dank
Gruß
|
|
Ralf Jansen
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Mi 29.04.15 13:14
| Zitat: | | Es soll etwas UI nahes passieren. Eine Neuberechnung eines Preises anhand des eingegebenen Einzelpreis. |
Das wie sich der Preis berechnet (auch wenn es was total simples ist) ist für mich sowas von Businesslogik ... das gehört ins Model nicht in die UI. Es sollte maximal aus der UI angetriggert werden.
|
|
Talemantros 
      
Beiträge: 444
Erhaltene Danke: 2
Win7 Proff 64bit
C# (VS2013)
|
Verfasst: Mi 29.04.15 20:30
Hallo Ralf,
würde das gern wie immer versuchen so gut wie möglich zu verstehen und umsetzen.
Leider habe ich das mit den Pattern noch nicht so drauf und kann mir gerade auch nicht richtig was unter BuisnessLogik vorstellen.
Also ich habe ein UserControl mit einem DGV, welches von einem Form angezeigt wird.
Hinter dem UserControl liegen momentan z.B.: ein Load Ereignis, welches aus einer Klasse mit Methoden das DGV füllt.
Wie würdest du jetzt vorgehen?
Bzw. gibt es was gutes verständliches eventuell um diese Pattern mit Beispielen zu "lernen"?
Danke
Gruß
|
|
Ralf Jansen
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Do 30.04.15 09:38
Das allgemeinste Stichwort wäre wohl Schichtenmodel. Und mit Businesslogik meinte ich eine Schicht die ein bestimmtest Problem deiner Anwendung löst unabhängig von den anderen Problemem/Schichten.
Ganz klassisch denkt man in solchen Anwendungen in 3 Schichten UI, Businesslogik, Persistenz oder platter ausgedrückt Darstellung, Verarbeitung, Speichern. Ein wichtiger Punkt ist das diese Schichten unabhängig sind was man daran erkennt das sie austauschbar wären ohne das die anderen angrenzenden Schichten geändert werden müssen. Also wenn du in deiner Anwendung was machst wie die angedeutete Preisberechnung was eindeutig eben in die Businesslogik Schicht gehört dann machst du es richtig wenn du ein kleines Gedankenexperiment durchgehst und dich fragst muß ich was an dem Code der Preisberechnung was ändern wenn ich die UI austausche (z.B. wenn du aus der Winforms Anwendung eine Web Anwendung machst). Wenn du was ändern mußt dann machst du eher was falsch.
|
|
Th69
      

Beiträge: 4805
Erhaltene Danke: 1061
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Do 30.04.15 10:48
Talemantros: kannst dir auch mal Drei-Schichten-Architektur dazu durchlesen.
|
|
Talemantros 
      
Beiträge: 444
Erhaltene Danke: 2
Win7 Proff 64bit
C# (VS2013)
|
Verfasst: Do 30.04.15 11:33
Ok danke euch beiden.
Damit beschäftige ich mich.
|
|
Talemantros 
      
Beiträge: 444
Erhaltene Danke: 2
Win7 Proff 64bit
C# (VS2013)
|
Verfasst: Fr 01.05.15 10:57
Hi,
um hier nochmal auf die 3 Schichten einzugehen.
Ich dachte ja, die Berechnung des Preises wäre UI nah.
Da dies nicht der Fall ist und ich in dem anderen Post gelesen hatte, dass die UI nur für die Anzeige und Eingabe der Daten ist wie müsste ich mir das Berechnen in einer unter geordneten Schicht dann vorstellen (Den Link hatte ich übrigens gelesen)
Beim Editieren, der Spalte des Einzelpreises startet das Event, gibt das gesamte DataTable (oder die Zeile?) an eine Methode einer anderen Schicht, die dieses dann berechnet und zurück gibt?
Gruß
|
|
Ralf Jansen
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Fr 01.05.15 13:03
Ein sauberes Schichtenmodell ist sicher schwer mit DataTables zu erreichen. Üblicherweise sollten zwischen den Schichten nur Daten transportiert werden (in einem möglichst neutralen Format). An einer DataTable und erst recht an einem DataSet hängt aber wesentlich mehr. Insofern sollte das Ziel sein die Berechnung des Preises zumindest aus einer konkreten Form und damit aus der Bindung an konkrete Controls rauszuhalten um es wiederverwendbar zu halten.
Da gibt es dann viele Möglichkeiten es ist aber schwer hier was konkretes zu raten ohne deine bisheriges System zu zerlegen. Was sich konkret anbietet hängt davon ab was du hast und wie du es bisher einsetzt. Ich kann nur allgemein raten mach es so das du es auch an anderer Stelle wenn du ein Preis berechnen musst es auch wiederverwenden kannst. Eine Methode die einen bestimmte DataTable Aufbau erwartet um den Inhalt dieser DataTable zu ändern/zu ergänzen würde ich vermutlich nur mit typisierten DataTables benutzen.
Im aller simpelsten ist es halt nur einen Methode einer Klasse die einfach den Einzelpreis und die Menge entgegen nimmt und den Gesamtpreis zurückgibt. Wenn du jetzt denkst aber ausmultiplizieren ist auch nur ein Einzeiler was soll das. Dann kann ich nur erwähnen das ich schon ganze Projekte habe scheitern sehen weil die Autoren nicht hinbekommen haben einheitlich die Grundrechenarten zu verwenden (Runden, auf wieviel Stellen, bei mehren Positionen in welcher Reihenfolge erst runden oder erst zusammenrechnen etc). Bei finanzmathematischen Systemen ist es peinlich wenn man ständig Cent Unterschiede hat obwohl es gleich sein sollte  . Wenn du genau eine Methode hast die das immer und überall macht ist es zumindest garantiert konsistent.
|
|
Talemantros 
      
Beiträge: 444
Erhaltene Danke: 2
Win7 Proff 64bit
C# (VS2013)
|
Verfasst: Fr 01.05.15 13:58
Vielen Dank für deine ausführliche Antwort.
|
|