Laden...
Avatar #avatar-2389.jpg
Benutzerbeschreibung
Wirtschaftsinformatik/Informationswirtschaft am KIT, Karlsruhe

Forenbeiträge von Razer Ingesamt 84 Beiträge

24.01.2013 - 10:55 Uhr

Vielleicht hilft es, wenn du deinen eigentlichen Algorithmus zunächst unangetastet lässt.
Stattdessen könntest du eine Klasse implementieren, welche die Zugriffe auf das Dateisystem verwaltet.

In deinem Algorithmus-Code verwendest du dann z.B. statt dem StreamWriter deine eigene Klasse, der Einfachheit halber kann die Schreiben-Methode dort ja ähnlich aufgebaut sein, wie beim StreamWriter.

So könntest du in Ruhe an der Umsetzung der von deinem Algorithmus angeforderten Lese-/Schreibzugriffe arbeiten.
Dein Algorithmus verwendet das Ganze dann als Black-Box - der Unterschied bestünde lediglich darin, dass Zugriffe dann durch die dahinterstehende Zugriffsstrategie mehr Zeit benötigen.

Ich könnte mir vorstellen, dass es der Übersichtlichkeit nicht gut tut, wenn man die beiden Aufgaben vermengt.

Viele Grüße

25.05.2010 - 02:40 Uhr

Wenn es nur eine ist die in der Konsole angezeigt wird aber aus Primzahlen berechnet ist.

Primzahlen zum Muttertag 😄
Ich weis nicht, aber ich glaube ich hätte dich enterbt 😄

06.05.2010 - 13:54 Uhr

Auch als Entwickler kommt man um eine Office-Suite ja kaum herum.

Für Studenten bietet Microsoft aktuell Office 2007 Ultimate für 52€ an. Das Besondere daran ist, dass ein man beim Erscheinen von Office 2010 eine kostenloses Upgrade auf dieses bekommt.

Die Lizenz bleibt auch nach dem Studium erhalten und der kommerzielle Einsatz ist zugelassen. Es handelt sich also quasi um eine vollwertige Retail-Lizenz.

Für 52€ ist das denke ich ein sehr guter Deal 🙂

http://www.microsoft.com/student/discounts/daswahreoffice/default.aspx

05.05.2010 - 23:56 Uhr

Lösung gefunden 😃

Das VS_Setup, gestartet vom MSDNAA-Datenträger, bietet die Möglichkeit die Lizenz auf die MSDNAA-Edition zu ändern.

So far,
Razer

05.05.2010 - 23:29 Uhr

Guten Abend,

mir ist gerade ein Missgeschick unterlaufen:
Meine Annahme war, dass man über MSDNAA einen Product-Key bekommt. Das ist aber offenbar nicht der Fall. Stattdessen ist offenbar das Image entsprechend angepasst.

Kennt jemand eine Möglichkeit, die installierte Trial im Nachhinein noch in eine MSDNAA-Ultimate umzuwandeln?

Möchte das ganze eigentlich nur ungern erneut aufspielen, denn das VS-Setup rührt gefühltermaßen im ganzen System herum.

Gruß,
Razer

12.04.2010 - 23:56 Uhr

Ultimate wäre tatsächlich ein dickes Paket..

12.04.2010 - 00:54 Uhr

Der erste der morgens bei MS im Büro ist macht sich nen Kaffee und schaltet nebenbei VS2010 frei 😉

Hier gibts den Countdown:
http://www.microsoft.com/visualstudio/en-us/watch-it-live/

12.04.2010 - 00:33 Uhr

Leider aber nach wie vor alles auf den RC eingestellt.
Denke die US-Zeit ist relevant.

06.04.2010 - 23:32 Uhr

Ich würde nichts unternehmen.

Warum für einen Standard in Panik verfallen, der möglicherweise erst in Jahren wirklich verwendet wird?
Es wird nie so heiß gegessen wie gekocht.

Am Ende wird es laufen wie im Jahr 2000: es passiert- nichts. Der Knall bleibt aus.

Ich glaube eher, die Provider werden peu a peu umstellen und die Software-Hersteller werden im gleichen Maß ihren Netzwerk-Code anpassen.

Hier und da wird die Buchhaltungssuite RechnungsKönig-2000-Schlag-mich-tot-Edition wegen Problemen nochmal nachgepatcht, das wars.

🙂

*EDIT:
Vielleicht klingt das leichtsinnig. Aber nach Jahr 2000-Problem, BSE, Vogelgrippe und Dauer-Terror-Alarm mag ich an die Apokalypse nicht mehr so recht glauben.
So auch in diesem Fall.

28.02.2010 - 22:36 Uhr

Für gewöhnlich bezeichnet man als Geisterscheinungen doch Phänomene, die sich eben nicht mit dem derzeitigen Stand der Naturwissenschaften erklären lassen bzw. bei denen es zumindest noch nicht gelungen ist.

Wenn du nun einen Feuerzauber hernimmst, dann ist es, sobald du ihn in Formeln gießen kannst, doch eigentlich kein Feuerzauber mehr - stattdessen ein irgendeine Gerätschaft, die eben z.B. Feuer erzeugt.

Insofern versuchst du etwas übernatürliches mit natürlichen Mitteln zu beschreiben..

10.02.2010 - 21:15 Uhr

Ja.. Die VS-Produktseiten sind auch weiterhin alle etwas hintendran..
Die RC-Site ist allerdings aktualisiert worden:
Visual Studio 2010 and .NET Framework 4 Release Candidate

Dort gibt es auch die anderen Versionen (Pro etc.).
Eine deutsche Version scheint jedoch nicht verfügbar zu sein.

EDIT:
hmm, um die 100kbyte/s im Augenblick. Da ist definitiv was los.

EDIT2:
@talla jop, warst schneller 😉

10.02.2010 - 21:02 Uhr

Visual Studio 2010 Ultimate RC ISO

http://bit.ly/c1YT6Q

Gruß,
Razer

21.05.2009 - 18:13 Uhr

So, ich habs 👍 🙂:

Es war eines der Tools, die im Hintergrund liefen - habe monentan das Samsung Utility für meinen TFT und die ATI Tray Tools genauer im Visier.

Nach dem Deaktivieren bzw. beenden alle nicht Windows-eigenen Prozesse und Services lief wieder alles Problemlos: WPF Apps, WPF-Projekte in VS, Expression Blend.

Da WPF ja recht grafiklastig ist, passt das gut zum aufgetretenen Fehler. Einige hardwarenahe Hooks stehen hier offenbar auf Kriegspad mit der WPF Runtime.

Gruß,
Razer

21.05.2009 - 16:12 Uhr

Wie befürchtet: Das Problem besteht weiterhin.

Offenbar wird das Problem eher von der zugrunde liegenden .NET Runtiome verursacht, denn der Fehler tritt sowohl mit als auch ohne SP1 und unabhängig von der Installation des Hotfixes auf.

Wie eingangs erwähnt starten ja auch fertig kompilierte WPF Anwendungen nicht.

Gruß,
Razer

21.05.2009 - 15:29 Uhr

Okay, danke. Ich glaube diesen Patch hatte ich jedoch bereits erfolglos getestet, muss aber nochmal nachschauen.

Ich schreibe hier wenn sich etwas neues ergibt.

Gruß,
Razer

13.05.2009 - 23:18 Uhr

Hallo,

in den letzten Tagen wollte ich etwas mit WPF experimentieren , bzw.
damit ein kleineres Projekt umsetzen.
Leider hat mir hierbei VS/.NET-Runtime einen Strich durch die Rechnung gemacht.
Folgende Probleme treten auf:

  • VS stürzt beim Erstellen einer neuen "WPF-Anwendung" (Neues Projekt) ohne spezifische Fehlermeldung ab ("*.exe... hat ein Problem festgestellt")

  • WPF-Anwendungen starten zwar, deren Benutzeroberfläche wird jedoch nicht angezeigt, es läuft ledeglich der Prozess mit mit geringer Speicherbelegung.

Installiert ist:

  • .NET Runtime 3.5 SP1
  • VS 2008 mit SP1, fast Vollinstallation
  • SQL Server 2008 Express mit AS

Alles in allem tummeln sich unter "Programme" also mehrere Dutzend .NET.Dev. bezogene Einträge.

De-& Neuinstallation der Runtime (inkl. .NET Setup Cleaning Tool) und von VS brachte keine Abhilfe.

Hat jemand ähnliche Erfahrungen gemacht bzw. einen Tipp?

Gruß,
Razer

25.01.2009 - 18:51 Uhr

naja, es war ja schon spät. 🙂

jop 😁

Auch wenn dein Code vereinfacht ist, so ist es doch schlicht falsch, dass der Event im Getter ausgelöst wird. Mal abgesehen davon, dass du die ganze Zeit im Text über Zeichenoperationen schreibst, die also den Inhalt des Bitmap-Objekts ändern und als Codebeispiel das Feuern des Events beim Austauschen des Bitmap-Objekts als ganzes zeigst. Das passt nicht so ganz.

Wenn ich das Bitmap hinter einer Propertie "verstecke" impliziert dass ja aber nicht, dass ich das Bitmap ab sofort immer nur als Ganzes ersetze.
Beim Zugriff via SetPixel etwa ist dies eigentlich nicht der Fall.
Die von den Designern generierten Klassen feuern ihre Änderungs-Events auch in den Settern.

Ein Event sollte nie direkt ausgelöst werden, sondern sollte vor dem Auslösen immer auf != null abgefragt werden.

ja, der Code war halt (zu) skizzenhaft.

Eine Frage bleibt noch: Lohnt sich der Aufwand? Denn an der Stelle, wo man den Event auslösen würde, könnte man auch einfach direkt das Flag setzen. 🙂 Es liegt ja hier kein Grund vor, das Setzen des Flags durch ein Events zu entkoppeln.

Wenn die Überprüfung die einzige Aufgabe ist, besteht dazu eigentlich keine Notwendigkeit, stimmt. Müssen aber noch weitere Ausgaben ausgeführt werden, fände ich das Auslagern weniger bedenklich.

Gerade bei Bitmaps kommen bei höheren Auflösungen vergleichsweise hohe Datenmengen auf, sodass jedesmal die komplette Datei einzulesen wäre. Da schießt du dann eindeutig mit Kanonen auf Spatzen.
Nein, durch den Hash würde man sich das ja gerade sparen. Man hätte also den einen einen Hash immer parat und müsste nur den Hash von dem potentiell geänderten Objekt berechnen. Und das liegt ja im Speicher, weshalb die Berechnung auch bei großen Bitmaps entsprechend schnell durchführbar wäre.

war definitiv zu spät 8o

=> @lorddoener ich drehe meinen Standpunkt um 180 Grad, und bin auch dafür dass du deine Bitmaps hashed 😉

25.01.2009 - 12:08 Uhr

@ Diamond

auch ich rate dir dringend zur Express Edition des SQL-Server, mit Access wirdt du bei deinem Anforderungsprofil kaum glücklich werden.

Bedenke, dass Access als reine Fassade zur Datenhaltung fungiert, und keinerlei Filterfunktionen ausführt.
Bei jeder Abfrage wird der gesamte (!) Inhalt einer Tabelle zum Client übertragen, erst dort wird das Resultset erstellt!
Das bedeuted dass du bei 10 Benutzern tonnenweise nutzlose Daten über dein Netzwerk transferierst, die Performance wird entsprechend schlecht wenn nicht unhaltbar sein.

Dass 10 Benutzer gleichzeitig auf einen Datensatz mit Kundenstammdaten zugreifen, ist schwer vorstellbar und noch schwerer zu realisieren.

25.01.2009 - 11:26 Uhr

Ich stelle es gerade selbst fest: Zu zweit (Peter Bucher und ich) arbeiten wir derzeit an einem eher kleinen Projekt, wo wir beide seit etlichen Wochen jeden Tag mehrere Stunden dransitzen.

Unser Ziel ist - abgesehen davon - dass nachher alles funktioniert, auch, eine saubere Architektur hinzubekommen, eine gute Testabdeckung zu haben, ... und das kostet unglaublich viel Zeit!

Wenn man guckt, was das Ding für den Endanwender kann, fragt man sich, wie wir da länger als einen oder zwei Tage dransitzen.

Same here..

Ich finde zudem, dass die immer mehr werdenden Möglichkeiten zur Entwicklung eines Produkts den Aufbau einer Architektur nicht zwangsläufig vereinfachen oder beschleunigen, teilweise ist das genaue Gegenteil der Fall.

Einige konkrete Beispiele:

Datenzugriff:

  • Entity Framework?
  • LINQ to SQL ?
  • ADO .Net 2.0 ?
  • ADO .Net 1.0?
  • NHibernate ?

User Interface:

  • WindowsForms?
  • WPF?
  • WebFrontend?

Design:

  • n-Tier (3 Layer? 4 Layer? 5 Layer?)
  • FatClient? SmartClient? ThinClient?
  • Applikationsserver?
  • Nur SQL Server?
  • Stored Procedures?
  • DTOs oder DB-Entitys?

Umfeld:

  • Net 3.5/3.0/2.0 möglich?
  • MS-Only Datenbanken?

Ja, was den nun?
Man könnte das noch weiterführen.

Dazu kommt, dass man oft keine der Technologien als "best practice" bezeichnen könnte:

  • Mit dem EF und L2S kann man tolle LINQ Abfragen basteln - aber mehrschichtige Anwendungen sind beim aktuellen Stand nur unschön zu lösen..

  • Mit ADO .Net 2.0 kann man Datensätze durch alle Schichten schieben - aber bei Abfragen darf man erstmal wieder "SELECT * FROM Customers WHERE ..." in seine Settings-Datei tippen.

  • Mit NHibernate darf man aber erstmal zig Attribute und Config Einträge ohne Designer manipulieren..

Eine kleine Anwendung zur Verwaltung von Kundendaten ist schnell geschrieben.
Aber hat man sich erstmal einge der Patterns angesehen, _vervielfacht _sich der Zeitaufwand gut und gerne:
z.B. Design mit Layern und MVP-Pattern:
DataAccess -> Manager -> Services -> Presenter -> UserInterfaces

Hinzu kommt noch die Abstraktion durch Interfaces und/oder DataContracts zwsichen den einzelnen Schichten, die die erforderliche Menge an Code und Planungszeit stark ansteigen lässt.

Ich denke deshalb, dass auch in der Software-Entwicklung der Grundsatz gilt, dass auf 20% der Funktionaliät 80% der Arbeit entfallen. Übertragen auf die Architektur könnte man also vielleicht die These aufstellen, dass eine saubere, auf Patterns bzw. Vermeidung von AntiPattern basierte Architektur mit einem Schluck Pragmatismus die produktivste Art der Entwicklung darstellt.

Gruß,
Razer

24.01.2009 - 23:44 Uhr
  1. Ist es langsamer?

Wenn der Benutzer dener Software auf eine geschätzte Millisekunde seines Lebens verzichten kann, dann dürfte es nciht so entscheidend sein..

  1. Ist es unsicherer?

Ja!

  1. Ist es nur seiner Meinung nach Falsch, weil Du es anders machst?

Nein!

In Kürze:

Du baust einen SQLCommand, und fügst dessen **Parameters **-Auflistung Objekte des Typs SqlParameter hinzu. Deren Konstruktoren übergibst du jeweils den Parameter-Alias der entsprechenden Spalte in deinem QueryString und den gewünschten Filterwert, fertig.

Kann sein dass die SqlParameter auch noch den Datentyp wissen wollen, kommt auf deinen DB-Provider an.

24.01.2009 - 23:31 Uhr

Ich habe gelesen, dass man da die Datei hashen kann und dann beide vergleichen, aber stimmt das auch?

Ich glaube die Hashes zu vergleichen ist so ziemlich der aufwendigste Weg um die von dir gewünschte Funktionalität zu erreichen 😉

Gerade bei Bitmaps kommen bei höheren Auflösungen vergleichsweise hohe Datenmengen auf, sodass jedesmal die komplette Datei einzulesen wäre. Da schießt du dann eindeutig mit Kanonen auf Spatzen.

Gruß,
Razer

24.01.2009 - 23:23 Uhr

Das Vorgehen ist eigentlich vom Prinzip her immer gleich:

Der Zweck eines Events ist es, dich über eine Änderung oder einen bestimmten Vorgang zu informieren. In deinem Fall willst du informiert werden, wenn auf deinen Bitmap eine beliebige Zeichenoperation angewendet wird.
Es ist dir aber egal, welche Operation da genau ausgeführt wird, denn du willst anschließend ja nur das Flag "HatUngespeicherteÄnderungen" auf true setzen.

Deshalb ist es zu feingranular, bei jeder Zeichenoperation das Flag zu setzen, du benötigst einen untergeordneten Event, der bei allen Zeichenoperation gefeuert wird. Das könnte in deinem Fall z.B. ein Event "BitmapChanged" sein, den der Setter einer Propertie auslöst:


// Bitmap
Bitmap currentImage;

// Bitmap Propertie
Bitmap CurrentImage
{
get
{
     BitmapChanged();
     return currentImage
}

set
{
currentImage = value;
}

// Event
event EventHandler BitmapChanged;


(Code etwas vereinfacht, es fehlen die EventArgs etc.)

Bei jedem Schreibzugriff auf dein aktuelles Bitmap - egal ob durch Pinsel, Weichzeichner oder sonstwas - wird der "BitmapChanged"-Event gefeuert - diesen kannst du abonnieren und bei Eintritt z.B. das Flag "HasPendingChanges" auf true setzen.

Gruß,
Razer

24.01.2009 - 15:09 Uhr

Wenn man als Entwickler ledeglich den SQL-Server als Plattform berücksichtigen muss, denke ich außerdem, dass z.B. LINQ to SQL in mancher Hinsicht einfach mächtiger ist - Stichworte wären LINQ to SQL, Concurrency Exceptions, Designer-Unterstützung, Support...

Wie werden den Updates mit deinem OR-Mapper eigentlich gemanaged?
Ich denke du speicherst eine Art RowState für jedes Objekt, welches durch die Ableitung von AisysObject bereitgestellt wird, oder?
Habe in deiner Doku nichts dazu gefunden.

Die Mischung aus englischen und deutschen Methoden- und Eventbezeichnungen finde ich persönlich ziemlich unschön und weniger hilfreich, ich denke dass du da mit etwas Refactoring mehr Stil erreichen kannst.

Nichtsdestotrotz erscheint mir deine Komponente ansonsten sauber aufgebaut, soweit ich dass mit meinen (doch deutlich bescheideneren) Kentnissen beurteilen kann.

Gruß,
Razer

24.01.2009 - 13:14 Uhr

Hallo JuyJuka,

an welche Stellen würdest du nun die Geschäftslogik packen?
In die Klassen selbst? In externe Manager-Methoden?

Gruß,
Razer

03.01.2009 - 17:49 Uhr

Falls dir das Singleton-Pattern nicht geläufig sein sollte, kannst du auch einfach static verwenden. In den allermeisten Fällen ist es eher eine Glaubensfrage, ob static oder singleton zum Einsatz kommt.

(Wobei ich damit nun nicht den Beitrag von Thomas B. herabsetzen will.)

Gruß,
Razer

03.01.2009 - 17:34 Uhr

Autoincrement-Spalten sind so eine Sache.
Idr. ist es oft am besten wenn du eine eben gespeicherte Zeile neu einliest, damit du die durch die DB vergebenen ID erfährst.
Generierst du die IDs in der Software, könnte es u.a. Probleme bei mehreren Benutzern geben.

Gruß,
Razer

03.01.2009 - 17:30 Uhr

Dein grundsätzlicher Ansatz erscheint mir etwas unsauber.

Prinzipiell solltest du so vorgehen:

  1. Mit der TableAdapter.Fill()-Methode Daten in die Tabellen des DataSet laden
  2. Die Daten dort bearbeiten, Zeilen hinzufügen, löschen
  3. Mit der Update()-Methode des TableAdapters diese Änderungen zurück in die DB schreiben.

Wenn das DGV die Änderungen am DataSet nicht gleich anzeigt:
DGV nach einer Änderung neu binden mit DGV.DataSource = myDataSet.myTable

Am besten verwendest du aber gleich eine BindingSource:

DataSet -> BindingSource -> DataGridView :

myBindingSource.DataSource = myDataSet.myTable;
myDataGridView.DataSource = myBindignSource;

Dann werden Änderungen sofort angezeigt.

03.01.2009 - 17:15 Uhr

from product in storage.Products**:::

Gruß,
Razer

02.01.2009 - 16:56 Uhr

Hallo laurasophie,

Gruß
Juy Juka

Ist es nicht so von MS gedacht gewesen, dass man die Geschäftslogik tatsächlich in solchen partiellen Klassen unterbringt?
(auch ich halte es für ein fragwürdig Konzept)

Gruß,
Razer

02.01.2009 - 16:52 Uhr

Hallo laurasophie,

Um ehrlich zu sein bin ich gerade mit einem ganz ähnlichem Problem beschäftigt.
In meinem Fall handelt es sich allerdings um eine WinForms-Anwendung, bei der die Layer keine physischen Grenzen überwinden müssen, d.h. es gibt keinen Application-Server oder etwas vergleichbares.
Die Schichten dienen damit eher einem sauberen Aufbau und einer wartbaren Grundarchitektur.

Derzeit habe ich auch noch keine wirklich befriedigende Antwort gefunden. Aktuell fasse ich die Entitys als Teil eines Contracts auf, d.h. jedes Projekt einer Schicht referenziert dann halt das Entity-Model mit den EF-Klassen.

Dummerweise steckt in diesem dann natürlich auch die DataAccess Logik.
Der Umweg über selbstgeschriebene Ersatzklassen ist mir eindeutig zu aufwendig, ich versuche es wenn dann auch über Schnittstellen hinzubekommen, alles manuell quasi doppelt zu schreiben, dass kann es doch irgendwo nicht sein.

01.01.2009 - 19:45 Uhr

In diesem Zusammenhang ist vielleicht folgender Artikel ganz interessant:

"The Entity Framework In Layered Architectures"
http://msdn.microsoft.com/en-us/magazine/cc700340.aspx

01.01.2009 - 13:47 Uhr

In der Doku springt mir spontan das "Entwiklerhandbuch" ins Auge 😁

01.01.2009 - 13:27 Uhr

Die externe Tabelle bietet eine Lösung für n benutzerdefinierte Datenfelder - inwiefern sollte da eine noch elegantere Lösung denn möglich bzw. überhaupt nötig sein?

Gruß,
Razer

01.01.2009 - 13:14 Uhr

Hallo Michael Günther,

Weiterhin gibt es das Entity Framework, das eigene Konkurenzprodukt von unserem Redmonder Software Riesen zu Linq. Linq wird wohl nicht mehr weiterentwickelt,
jedoch bleibt es eine schöne einfache Möglicheit Abfragen gegen die Datenbank zu senden.
Das Entity Framework wird weiterentwickelt. Einen Blick auf jeden Fall wert. 😮

So long da kubi.

Hier ist allerdings anzumerken, dass nur LINQ 2 SQL betroffen ist, nicht die LINQ-Abfragetechnologie selbst, denn diese kommt ja auch beim Entity Framework zum Einsatz (und wird dann dort nochmal in Entity SQL übersetzt).

Grundsätzlich stelle LINQ ja nur eine Möglichkeit zur Abfrage von Daten da, und kann für verschiedene Datenquellen gewnutzt werden, solange diese bestimmte Schnittstellen implementieren.

@ Michael Günther:

Eine kombinierte Lösung wäre auch denkbar. Jede Instanz einer DataAccess-Klasse greift dann z.B. auf das gleiche, als statisch deklarierte SQLConnection-Feld zu.
So kommt es zu keinen Scherereien mit mehreren Verbindungen, und du kannst die weiteren Felder und Methoden der Klasse trotzdem individuell nutzen.

20.12.2008 - 19:08 Uhr

@ vbprogger / kleines_eichhoernchen

hmm ja, das stimmt eigentlich.
Ich werde es in den nächsten tagen mal testen - ich gehe sogar davon aus das es klappt, es handelt sich ledeglich um einen simplen Login Dialog bei der Deutschen Post.

Wäre natürlich möglich, dass per JS noch die Eingabestrings in Form gebracht werden (Leerzeichen etc.), aber solche Bereinigungen kann ich ja auch im Vorfeld programmatisch lösen.

17.12.2008 - 19:02 Uhr

Ich stehe derzeit vor einem ähnlichen Problem (bloß nicht ganz so komplex - keine Joins) und habe einen, in meinen Augen, unbefriedigenden Lösungsansatz gefunden. Aber zunächst: Wenn man sich mal anschaut wie das bei Access oder im Abfragen-Assistenten des SQL Server Management Studios gelöst ist, ist das auch nicht wirklich benutzerfreundlich und intuitiv zu bedienen. Ich denke aber, wenn es da eine benutzerfreundlichere/bessere Lösung geben würde, hätte Microsoft diese sicherlich in ihre Produkte integriert.

Hmm ja, das hat mich auch schon verwundert. Überhaupt habe ich selten einen wirklich intuitiven, jedoch gleichzeitig mächtigen Filter-Editor in einer Software gesehen.
Ich vermute es liegt daran, das die meisten Kunden schlichtweg zu faul sind, komplexe Filter zu erstellen. Vielleicht sollte man sich lieber auf einfachere, aber dafür "smarte" und schnelle Filtermöglichkeiten konzentrieren.

Meine aktuelle Lösung besteht aus einem DataGridView mit den Spalten "Feld", "Operator", "Wert" und "Verknüpfung". In "Feld" ist eine DataGridViewComboBoxColumn in der alle verfügbareren Felder der ausgewählten Tabelle angezeigt werden. Je nach Datentyp des ausgewählten Feldes ändern sich dann die Auswahlmöglichkeiten der Spalte "Operator" (auf Strings lässt sich kein "≥" anwenden, etc.). In "Wert" steht dann der entsprechende Wert, den das Feld haben soll und "Verknüpfung" beinhaltet entweder "oder", "und" oder "keine", je nachdem wie der "Ausdruck" zu dem folgenden steht.

Das Problem besteht denke ich eher darin, die gebauten Filter zu parsen.
Wenn man nicht gerade Übung darin hat, befürchte ich dass da ziemlich unsauberer Code ensteht.

Gruß,
Razer

17.12.2008 - 18:54 Uhr

Hmm ja, damit habe ich schon mal kurz experimentiert, nur ist mir nicht ganz klar, wie ich damit eine JavaScript-Funktion auslösen kann.
Die Daten werden ja eben nicht über die Post/Get Methoden übermittelt, und zu den WebRequests habe ich nur Beispiele mit diesen Varianten gefunden.

Wie gesagt bin ich mit den Websprachen und deren Zusammenspiel nicht ganz so gut informiert.

Wenn jemand nochmal einen konkreten hatt, hätte ich nichts dagegen. Ansonsten eilt es mit mit dieses Problem gerade sowieso nicht so 😉

Gruß,
Razer

14.12.2008 - 23:11 Uhr

Situation: Daten liegen auf DB-Server; Zugriff via WinForms-Client

für eine Applikation würde ich dem Benutzer gerne die Möglichkeit geben, neben den vorgefertigten Filtermöglichkeiten auch selbst Filter zu entwerfen.

Die Ausgabemenge bezieht sich dabei immer auf eine bestimmten Typ von Entitäten, d.h. z.B. _Customers _oder Orders.
Im Endeffekt soll der Benutzer nun die Ausgebeliste durch beliebig komplexe Filterbedingungen an verknüpfte Tabellen einschränken können.
Der anzuzeigende Kundenkreis könnte z.B. dadurch bestimmt sein, dass nur Kunden angezeigt werden sollen, deren Bestellungen in einem gewissen Zeitbereich liegen.

Hat jemand Erfahrungen in diesem Bereich gesammelt oder kennt ein brauchbares Control oder einen guten Ansatz?
Ziel wäre also im Endeffekt eine Möglichkeit die Filterbedingungen benutzerfreundlich grafisch zusammenzuklicken.

Gruß,
Razer

14.12.2008 - 22:58 Uhr

leider habe ich bzgl. dem Web im Zusammenspiel mit C# bisher wenig Erfahrung.

Mir ist klar wie man sich auf einer Site einloggen kann, wenn diese ihre Parameter z.B. über HTML-GET in Empfang nimmt.
Wie gehe ich aber nun vor, wenn die Site einen Button besitzt der auf eine JavaScript-Funktion verweist, also z.B.

 javascript:document.forms[0].submit()

Den Weg über ein Webbrowser-Control zusammen mit Invoke des Button-Elements wollte ich vermeiden, da er mir unsauber erscheint und die Applikation abhängig von den Internet-Explorer-Bibliotheken macht.

Bin für jeden Vorschlag offen 🙂

Gruß,
Razer

14.12.2008 - 12:35 Uhr

Was heist Schnittstellen, es muss halt eine Engine her - auf der kann ich nacher aufbauen, und mein Spiel verwirklichen.
Und das ganze ist in 3D um ein mehrfaches komplexer als mit Sprites & Co.

Das die Schnittstellen und die Architektur stimmen müssen, ist klar.
Eine diesbezügliche Vereinfachung lässt sich aber eben doch ganz einfach erreichen, wenn man auf 2D umsattelt.

13.12.2008 - 18:18 Uhr

Völlig utopisch, dass ganze in 3D zu realisieren.
Allein die Engines, die koordinieren wie und wann Texturen nachgeladen werden, die die Beleuchtung realisieren.. so geht das endlos weiter. ⚠

Fangt doch mit einem einfacheren MMO-RPG auf 2D-Basis an.
Und überlegt euch diesbezüglich mal wieviele Leute wie lange an 2D-Spielen wie z.B. Diablo gearbeitet haben.

Ergo: Erstmal kleinere Brötchen backen 😉 😉

13.12.2008 - 17:37 Uhr

Das folgende Projekt bezieht sich auf _OpenOffice _- da aber auch MS-Office mittlerweile auf XML setzt, hilft es dir vielleicht doch in irgendeiner Weise weiter:

http://www.codeproject.com/KB/printing/odt_printing.aspx

(Oder du lieferst mit deiner Software gleich noch OpenOffice aus 😄)

Gruß,
Razer

13.12.2008 - 17:30 Uhr

In welchem Szenario soll es Sinn machen, die interne Reihhenfolge der Zeilen zu ändern?
Idr. legst du diese erst bei der Anzeige zur Laufzeit fest.

Dein Code kann nicht funktionieren, weil "OldRow" ledeglich eine Objektreferenz (Verweis) auf eine Zeile darstellt. Wenn du diese Zeile anschließen löschst, dann geht auch der Verweis ins Leere ("Auf die gelöschten Zeilen... kann nicht zugegriffen werden" etc.)
Wenn du bei deinem Vorgehen mit dem Sortierenbleiben willst, probier es über die Eigenschaft ItemArray der Zeile, und speicher deren Werte irgenmdwo temporär zwischen.

Gruß,
Razer

13.12.2008 - 17:24 Uhr

Ich meine mich zu erinnern dass der Konstruktor der SQLiteConnection einen optionalen Parameter bestitzt, mit dem man das verwendete Encoding festlegen kann.
Probiert es einfach mal aus,

Gruß,
Razer

13.12.2008 - 17:18 Uhr

Ich denke aber nicht dass diese Umstände dazu geführt haben, dass entwickler-press in diesem Jahr keinen Adventskalender online stellt.
Wenn man ePaper in Form von PDFs an definierten Tagen kostenfrei zum Download stellt, dann ist es absehbar, dass der ein oder andere die Datei weiterleiten oder hochladen wird - auch zu einem späteren Zeitpunkt.
So naiv sind die bei entwickler-press ja nun auch nicht, die werden den Nutzen (Publicity, Page-Visits) schon abgewogen haben.

Zum anderen ist der Wert solcher eBooks doch sehr beschränkt. Mal ehrlich, Titel wie "Software Lifecycle", "ebay API", "Dojo Toolkit" oder "Social Software", die schon als reguläres Remitenden-Paperback für 1-2€ über den Tisch gehen, die haben als tausendfach verbreitetes PDF keinen signifikanten Geldwert mehr.

Ergo sind die Absatzverluste durch den Adventskalender gering, einige hundert zusätzliche "illegale" Downloads spielen da meiner Ansicht nach keine Rolle mehr.
Wer das Buch wirklich benötigt, der wird in den meisten Fällen sowieso diesen kleinen Obulus in eine handfeste Edition investieren. Vielleicht kauft sogar der ein oder andere das Buch erst deshalb, _weil _er es durch den Adventskalender die Möglichkeit hatte, es vorher in seiner Gänze zu betrachten.

Gruß,
Razer

30.11.2008 - 18:28 Uhr

Auch in diesem Jahr gibt es bei CHIP wieder Software-Fastfood in Form von kostenlosen Vollversionen 😉

2008: http://www.chip.de/adventskalender

[EDIT=herbivore]
Chip
2009: http://www.chip.de/artikel/Download-Adventskalender-2009_33781926.html
2010-2013: http://www.chip.de/artikel/Download-Adventskalender_33781926.html
2024: http://www.chip.de/s_specials/Download-Adventskalender_74217484.html

Teilweise lenken die alten Links auf den jeweils aktuellen Kalender um.

PC-Welt
2011: http://www.pcwelt.de/special/XMAS-Kalender-1388941.html
[/EDIT]

Gruß,
Razer

30.11.2008 - 16:40 Uhr

Hallo JuyJuka,

zu finden z.B. unter
https://community.dynamics.com/blogs/cesardalatorre/comments/9584.aspx

Du hast aber natürlich Recht, im Endeffekt sind es ledeglich andere Begrifflichkeiten für ein und diesselbe Thematik, hier also verteilte bzw. nicht verteilte Anwendungen.

Immerhin fassen die Definitionen aber so den Aufbau bzgl. dem Ort der Schichten in jeweils eigenständige Begriffe zusammen.

29.11.2008 - 19:01 Uhr

Hallo newbe777,

Wie lange dauert es den in deinem Fall?
Wenn die Berechnung der selektierten Zeilen auch ohne externe Einflüsse tatsächlich so aufwendig wär, wie von dir beschrieben, könntest du davon ausgehen dass es eher wie


dgv.GetSelectedRowCount()

aussehen würde

Allgemein gesagt kannst du dich im Framework eigentlich auf die Richtlinie verlassen, dass aufwendige Berechnungen nicht in Properties gesteckt werden, sondern in Methoden.
Das ist bei dir aber nicht der Fall.
Ergo: Es muss eine andere Ursache haben.

Vielleicht könnte es helfen, wenn du eine kleine WinForms-Testapplikation schreibst, die tatsächlich ledeglich Daten ausließt und bindet. Das Auslesen der ".Count" Propertie kannst du dann z.B. mit einer Instanz der System.Diagnostics.Stopwatch-Klasse ermitteln.
Ich gehe mal davon aus, das irgendein externe Code (sprich von dir geschrieben) die Ermittlung auf irgendeine Weise verlangsamt.
Oder du verdächtigst den falschen Aufruf 😉

Gruß,
Razer

29.11.2008 - 18:46 Uhr

Hallo JuyJuka,

N-Tier = Schichten können auf verschiedenen Plattformen / Maschinen / o.ä. laufen, z.B. als Service etc.
N-Layer = Schichten extistieren nur lokal, innerhalb der Software, stellen also mehr eine logische Trennung dar

n-Tier Anwendungen laufen also z.B. als Service für Webanwendungen.
Die Schichten befinden sich an unterschieldichen Orten

n-Layer Anwendungen laufen z.B. als eigenständige Windowsanwendung
Die Schichten dienen vornehmlich der Erweiterbarkeit und sauberen Organisation von Zuständigkeiten u.ä..

Gruß,
Razer