Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von -Hades-
Thema: DataView Rowfilter -> DateTime to Time
Am im Forum: GUI: Windows-Forms

Hallo,

eine kurze Frage, ich möchte ein DatagridView mit Hilfe der Rowfilter-Eigenschaft filtern. Ich habe eine Spalte vom Typ DateTime. Diese filter ich bereits mit ≤ und ≥ . Allerdings möchte ich jetzt zusätzlich noch die Uhrzeit filtern. Das soll unabhängig vom Datum geschehen, also wirklich nur die Uhrzeit.
Es gibt keine Time() Methode oder dergleichen.

Hat jemand eine Idee wie ich ein DateTime nach der Uhrzeit zwischen einem Min- und Maxwert filter?

Gruß -Hades-

Thema: Bild in DatagridviewComboBox darstellen
Am im Forum: GUI: Windows-Forms

Ich hoffe das hat schon jemand getan. Aber könnte ja sein das das auch schon geht... etwas versteckt.

Thema: Bild in DatagridviewComboBox darstellen
Am im Forum: GUI: Windows-Forms

Nehmen wir mal die ImageBox des Datagridview, die bekommt auch nur ein Byte-Array und wandelt dieses selbstständig in ein Image um und zeigt es an. Eben diese Funktionalität wäre für die ComboBox wünschenswert, damit ich die DataTable nicht selbst zusammenbauen muss, da das Byte-Array über eine ID referenziert ist.

Denkbar wäre ja eine Eigenschaft der DatagridViewComboBox namens: ValueIsImage und alles wäre gut. ;)

Thema: Bild in DatagridviewComboBox darstellen
Am im Forum: GUI: Windows-Forms

Hi,

also ich habe kein Problem aus einem Byte-Array eine Bitmap zu erzeugen. Es geht darum ein Image in einer DatagridViewComboBox darzustellen. Eine ImageBox möchte ich nicht nehmen, dann müsste ich die DataTable selbst zusammenbauen. Da das Byte-Array für das Image aber schon in einer Tabelle referenziert ist wäre es viel schöner wenn das mit der ComboBox geht, dann könnte ich den Display- und Valuemember setzen und fertig.

Thema: Bild in DatagridviewComboBox darstellen
Am im Forum: GUI: Windows-Forms

Hallo,

ich würde gerne ein Bild in einer DatagridviewComboBox darstellen, am besten ohne Draw-Methoden überschrieben zu müssen.

Ich habe eine Tabelle, in der die ID für eine andere Tabelle hinterlegt ist. In dieser befindet sich das Bild. Also mit Text ist sowas ja sehr leicht mit einer Combobox und den Display- und Valuemember eigenschaften zu lösen. Das einzige was fehlt ist, den referenzierten Wert als Image anzeigen zu können. Stattdessen wird nur das byte-Array angezeigt.

Ich hoffe ich habe nur übersehen wie das geht oder womöglich hat jemand schon eine abgeleitete Klasse geschrieben die das ermöglicht?

Gruß -Hades-

Thema: Cannot add or update a child row
Am im Forum: Datentechnologien

Hallo f_igy,

danke für den Link. Demzufolge müsste mein TableAdapterManager, den ich für die Updates nutze, ja schon das hierarchische Einfügen beherrschen. Allerdings bekomme ich trotzdem die exception (neuerdings).

Also was ich ganz konkret habe und mache:

Ich habe simpel ausgedrückt die Tabelle Partner mit einem selbst erstelllten Guid Primärschlüssel. Daneben eine Tabelle Adresse, die die Partner-Guid als Fremdschlüssel enthält. Ich erzeuge mit einem typisierten Dataset erst den Partner, erzeuge die guid, erzeuge dann eine Adresse, setze die fremdschlüssel guid vom Partner und möchte diese beiden Zeilen dann mit Hilfe des TableAdapterManager committen. Da kommt dann die Exception.

Vorher war es sogar so, dass ich erst die Adresse committen konnte, ohne den Partner mit hochzuladen, ich habe also nur die mir bekannte Guid als Fremdschlüssel gesetzt und MySql hat nicht gemeckert, also auch nicht wenn die Guid auf die verwiesen wird gar nicht existiert.
Darauf aufbauend habe ich meinen Code erstellt, und da müsste ch jetzt wirklich eine große Menge von abändern wenn das so jetzt nicht mehr funktioniert...

Thema: Cannot add or update a child row
Am im Forum: Datentechnologien

Hallo,

es sind keine unterschiedlichen Transaktionen. Ich füge völlig neue Datensätze ein. Ich habe auch nicht das Datenbankschema verändert.
Das mit dem TableManager habe ich schon ausprobiert. Er macht zunäcst Inserts, allerdings funktioniert das auch nicht, da er wohl erst die "falschen" Zeilen inserten will, die aber den Fremdschlüssel (den es noch nicht gibt) beinhalten...

Thema: Cannot add or update a child row
Am im Forum: Datentechnologien

verwendetes Datenbanksystem: mySql 5.6.11

Hallo,

ich habe meine komplette Datenbank auf Guid für die Primärschlüssel umgestellt. Der Grund ist, dass ich den Schlüssel direkt selbst bestimmen möchte ohne den Umfang zum Datenbankserver. Dadurch kann ich dann mehrere Zeilen erstellen und die Fremdschlüssel zuweisen ohne vorher was committen zu müssen. Das hat auch alles wunderbar geklappt, bis jetzt.
Jetzt bekomme ich immer eine Exception: Cannot add or update a child row: a foreign key constraint fails

und zwar will er eine Zeile einfügen, die per Fremdschlüssel auf eine andere Zeile verweist, die aber noch nicht committed ist und demnach meint er das geht nicht.
Bis vorgestern wurde das allerdings problemlos committed.
Ich habe eine neue Xampp-Version installiert und damit auch eine neuere MySql-Version (denke ich). Ich denke es liegt daran aber vielleicht irre ich mich auch.
Weiß jemand wie ich das alte Verhalten wiederherstellen kann?
Ich benutze typed datasets, vielleicht kann man den TableManager ja auch etwas klüger machen, so dass er in der richtigen Reihenfolge einfügt??


Gruß -Hades-

Thema: Verwaltung von Datasets
Am im Forum: Datentechnologien

verwendetes Datenbanksystem: MySql


Hallo,

ich schreibe gerade an einem Programm welches eine relativ große ( >40 Tabellen) Datenbank nutzt. Ich wollte hier nach Erfahrungen im Umgang mit den Datasets erkundigen. Zur Zeit habe ich mehrere ControllerKlassen geschrieben, welche jeweils Datasets besitzen und für bestimmte Teile der Datenbank zuständig sind.
Allerdings wird das mittlerweile recht viel Aufwand, da für jeden Controller Events geschrieben werden müssen und die Datasets geupdated werden müssen etc.
Da das theoretisch ja auch alles in einer Klasse mit einem TableAdapterManager und einem Dataset funktionieren würde bin ich mir nicht mehr ganz so sicher ob es klug war das alles so aufzuteilen.
Generell frage ich mich auch wie ich es am geschicktesten anstelle alles aktuell zu halten. Die naive Lösung ist natürlich die Datasets bei jeder Methode in der Informationen aus der Datenbank gebraucht werden erneut durch den TableAdapterManager zu füllen, was bei vielen Daten und vor allem wenn die Datenbank nicht lokal verfügbar ist, sehr lange dauert und nicht praktikabel ist.
Also würde ich jetzt die Datasets (oder ab jetzt vielleicht das eine Dataset) in einem Hintergrundthread komplett füllen. Damit wären die Daten lokal, allerdings brauche ich dann ein Konzept zum Updaten, da mehrere Clients auf die Datenbank zugreifen können und auch verändern können. Vielleicht gibt es dafür ja schon Mechanismen mit denen einige von euch Erfahrung haben.

Also die Fragen die ich mir stlele noch einmal als Stichkpunkte:

- Ein Dataset für alles oder Spezialisierungen
- Update-Mechanismus für die Datasets (mehrere Clients vorhanden)


Vielen Dank im voraus für eure Meinungen.

Gruß -Hades-

Thema: Primary Key nach Update erhalten
Am im Forum: Datentechnologien

Ah ok,

das hört sich gut an, dann werde ich das wohl mal in einem Stresstest ausprobieren.

Falls das schonmal jemand getestet hat oder definitiv weiß das es funktioniert, bitte melden.

Thema: Primary Key nach Update erhalten
Am im Forum: Datentechnologien

Um das Problem nochmal zu verdeutlichen: Nehmen wir an ich habe nicht nur einen Client der sein Dataset committed, sondern 1000 Clients die alle gleichzeitig ihre Datasets in die Datenbank schreiben lassen.
Jetzt muss ich in dem Event für jede Zeile garantieren können, dass Select last insert id auch genau die richtige ID für genau die behandelte Zeile liefert, ansonsten ist das nutzlos.

Thema: Primary Key nach Update erhalten
Am im Forum: Datentechnologien

Hmm ja das ist klar FZelle,

aber was passiert wenn ich 1000 Zeilen in meinem Dataset hinzugefügt habe und für das Dataset jetzt über den TableAdapter committe und in die Datenbank schreibe.
Dann wird, wie du schon gesagt hast, das RowChanged-Ereignis für jede Zeile ausgeführt.
Ist denn jetzt garantiert, dass wenn ich per SELECT LAST_INSERT_ID() die ID hole das auch diejenige für genau die Zeile ist die ich in dem Event behandle?
Das DBMS wird ja kaum warten bis ich mein Event behandelt habe bevor es die nächste Zeile einfügt.

Ich hoffe es ist verständlich was ich meine.
Wenn in den Ereignisparametern schon die zurückgeliferte ID drin stehen würde wäre das kein Problem aber da habe ich ja nur den EreignisTyp (Commit)...

Thema: Primary Key nach Update erhalten
Am im Forum: Datentechnologien

Hi FZelle,

also das mit dem Event hört sich an sich nicht schlecht an, jedoch frage ich mich ob das praktikabel ist. Die Sache ist, das ich nicht immer für jede Zeile im Dataset ein Update aufrufe, sondern ein Update für ein ganzes Dataset, in dem ich mehrere Zeilen geaddet habe.
Ich kann ja jetzt nicht garantieren das der "SELECT LAST_INSERT_ID()" Befehl genau die ID zu der Zeile für die ich gerade das Event behandle zurück liefert. Es kann ja in der Zeit in der das Event behandelt wird schon wieder eine neue Zeile geschrieben sein.?

Falls es doch einen Mechzanismus gibt mit dem ich in dem UpdateEvent genau die ID zu der Zeile bekomme wäre das natürlich besser.
Ansonsten würde ich dann jetzt die GUID´s einsetzen.

Thema: Primary Key nach Update erhalten
Am im Forum: Datentechnologien

verwendetes Datenbanksystem: MySql

Hallo,

ich schreibe zur Zeit an einem Programm welches eine MySql-Datenbank nutzt. Ich verwende Visual Studio 2012 und nutze stark typisierte Datasets, da dies der bequemste Weg zu sein scheint.

Ich habe für alle Tabellen einen Primärschlüssel mit AutoIncrement-Attribut. Wenn ich ein Dataset, in dem ich mehrere Zeilen eingefügt habe mit Hilfe des TableAdapters in die Datenbank einfüge (Update-Methode), werden die Zeilen im Dataset nicht mit dem von der Datenbank vergebenen Primärschlüssel aktualisiert.

Die Werte brauche ich allerdings um Zuordnungen zu machen. Wenn ich zwei Zeilen mit gleichen Werten einfüge (theoretisch) kann ich ja auch nicht einfach nach den Werten in der DB suchen um den vergebenen Wert zu erhalten, außerdem ist das ja nicht unbedingt sehr performant.
Ich würde die Update-Commands auch ungerne umschreiben, da diese dann ja bei der nächsten Änderung der Datenbank überschrieben werden da der Code generiert wird.

Meine Frage also: Gibt es eine Einstellung, so dass die Zeilen des Dataset nach dem Update aktualisiert werden? (Wird der return der Kennung von MySql vielleicht gar nicht unterstützt?)
Wenn dem nicht so ist was würdet ihr vorschlagen? Ich denke ich würde mir dann eine eigene Kennung über GUID erzeugen, da mir das als die einfachste und eine funktionierende Lösung vorkommt.

Ich bin für alle nicht umständlichen Lösungen und Vorschläge offen. ;)

-Hades-

Thema: Magnification API langsam
Am im Forum: Grafik und Sound

Hat denn noch niemand Erfahrung bezüglich Windows 8? Ich weiß es ist schon recht speziell aber ich hoffe jemand hat noch eine Idee.

Thema: Magnification API langsam
Am im Forum: Grafik und Sound

Ich wollte das Thema noch einmal kurz pushen, in der Hoffnung das doch noch jemand eine Idee hat das schneller hinzubekommen oder vielleicht hat jemand noch einen ganz anderen Ansatz für Windows 8...

Gruß -Hades-

Thema: Magnification API langsam
Am im Forum: Grafik und Sound

Hallo Herbivore,

ja das ist im generellen Fall schneller, da die Zeiten für ein Rechteck von 1x1 Pixel nicht sehr stark von 100x100 abweichen.
Leider ist das jetzt nicht die super Lösung, da selbst wenn man immer den kompletten Screen oder eben einen größeren Bereich, in dem sich alles befindet was man untersucht, nimmt und dann per LockBits weiterarbeitet ist das schon nach ein paar Wiederholungen sehr viel lamgsamer im Vergleich zu Bitblt unter Windows 7 etc.

Thema: Magnification API langsam
Am im Forum: Grafik und Sound

Hallo MrSparkle,

vielen Dank für die Anregung, den Thread auf den du dich beziehst habe ich seinerzeit auch verfolgt und nutze LockBits auch immer, ist nicht zu schlagen. Leider geht es mir nicht darum auf Pixeldaten einer vorhandenen Bitmap zuzugreifen, sondern es geht darum zunächst die Pixeldaten vom Screen (aus einem vorgegebenen Rechteck) in eine Bitmap zu bekommen.

Danach nutze ich bereits LockBits um die Pixeldaten der Bitmap auszuwerten.

Thema: Magnification API langsam
Am im Forum: Grafik und Sound

Hallo,

ich hatte in einem vorherigen Thema (siehe BitBlt dauert unter bestimmten Umständen (Aero?, Windows 8?) zu langsam) die schlechte Performance von Bitblt unter Windows 8 angesprochen. Das ist anscheinend durch den Window Desktop Manager zu begründen, da erst so etwas wie ein Schnappschuss erstellt werden muss um an die Pixeldaten zu kommen.
Die Lösung zu einer schnelleren Methode schien die Verwendung der Magnification API. Diese habe ich auch eingebaut und es sah zunächst auch sehr gut aus. Jetzt habe ich das aber mal genauer untersucht mittels Stopwatch und es zeigt sich, dass von "schnell" keine Rede mehr sein kann.

Selbst ein Rechteck von 1x1 Pixel aufzunehmen dauert mindestens immer 4ms und die Zeit geht hoch bis zu 20ms. Bei Bitblt unter Windows XP und darunter dauert das konstant 0ms (mit Stopwatch gemessen). Wenn man das ziemlich oft macht und z.B. Hautpartien in einem großen Bild finden will merkt man das deutlich, da die Verarbeitung dann von ca. einer halben Sekunde auf 15 - 20 Sekunden steigt...

Vielleicht habe ich abe auch irgendwo einen Fehler gemacht, daher erkläre ich kurz mein Vorgehen:

Ich habe die C++ Methoden für die Magnification-Routinen in einer DLL ausgelagert. Es gibt eine Routine, die ich im Vorfeld einmal aufrufe, welche das Host- und das Magnification-Window erstellt und MagInitialize() aufruft und die Transformationsmatrix anwendet. Zudem wird hier die Methode MagSetImageScalingCallback() aufgerufen, welche eine Callback-Methode registriert, in der ich die Pixeldaten abfange und in eine Bitmap umwandle (C# Seite).

Eine zweite Routine, welche ich immer dann aufrufe wenn ich ein Rechteck des Screens lesen will, nimmt die Handles der Windows und das Zielrechteck entgegen, ändert die Größe der Windows und ruft MagSetWindowSource() der Magnification API auf, damit die aktuellen Pixeldaten des Zierechtecks in das Magnification Window kopiert werden. Danach wird dann meine Callback-Methode aufgerufen, welche die eigentlichen Pixeldaten empfängt.


Die zweite Routine, die ich immer aufrufe sieht so aus:


DLL void GetBitmapForRectangle(HWND magWindowHandle, HWND hostWindowHandle, long bitmapDataCallBackPointer, int startX, int startY, int width, int height) 
{
	RECT sourceRect;
	sourceRect.left = startX;
	sourceRect.top = startY;
	sourceRect.right = width;
	sourceRect.bottom = height;

	SetWindowPos(hostWindowHandle, HWND_TOPMOST, 0, 0, width, height, SWP_NOZORDER | SWP_NOACTIVATE);

	SetWindowPos(magWindowHandle, HWND_TOPMOST, 0, 0, width, height, NULL);


	MagSetWindowSource(magWindowHandle, sourceRect);
}


Ich hoffe jemand weiß da einen Rat. Selbst wenn ich die SetWindowPos() Methoden rausnehme, was natürlich zu einem falschen Ergebnis führt, wird es nicht merklich schneller, es liegt also an MagSetWindowSource() denke ich.

Ich hoffe das man trotz Window Desktop Manager so etwas noch umsetzen kann ohne diese Performance-Einbrüche.

Thema: BitBlt dauert unter bestimmten Umständen (Aero?, Windows 8?) zu langsam
Am im Forum: Grafik und Sound

Ok funktioniert jetzt alles, danke für die Tipps.

Thema: BitBlt dauert unter bestimmten Umständen (Aero?, Windows 8?) zu langsam
Am im Forum: Grafik und Sound

Hey danke yogibear,

mit dem Bitmapkonstruktor wäre das ja übertrieben einfach und ich dachte ich muss die Bytes Zeile für Zeile durchgehen... Hoffe das funktioniert auch, werde es ausprobieren.

Thema: BitBlt dauert unter bestimmten Umständen (Aero?, Windows 8?) zu langsam
Am im Forum: Grafik und Sound

Hmm ok, das werde ich dann mal suchen, also du meinst am besten eine C# Methode innerhalb der C-Callback-Methode aufrufen?

Könntest du mir denn vielleicht erklären wie ich die Daten (void*) in eine Bitmap bekomme?

Thema: BitBlt dauert unter bestimmten Umständen (Aero?, Windows 8?) zu langsam
Am im Forum: Grafik und Sound

Hallo Herbivore,

ich habe jetzt endlich Zeit gefunden mir die Magnification API anzusehen. Diese funktioniert sehr gut und ist selbst bei einer Auflösung von 1920x1200 sehr flott, also wenn man den kompletten Screen vergrößern lässt.

Allerdings gibt es 2 "Probleme" damit. Erstens ist es zur Zeit eine reine C++ Bibliothek, zweitens bin ich dadurch auf die Funktionalität der API beschränkt. Ich brauche etwas mehr als nur die Vergrößerung. So würde ich gerne erst ein wenig Computer Vision betreiben bevor ich etwas vergrößere. Also z.B. wenn ich über ein Bild gehe möchte ich gerne im Vorfeld erkennen das es sich um ein Gesicht oder einfach nur Hautpartien handelt.
Dazu brauche ich allerdings die Pixelinformationen. Also schlussendlich würde ich gerne eine Bitmap erhalten, auf der ich arbeiten kann.

Ich habe in der Magnification API die MagSetImageScalingCallback Methode gefunden, welche das handle des MagnificationWindow annimmt und eine Callback Methode. Darüber ist es anscheinend möglich an die Pixelinformationen zu gelangen, da diese meines erachtens als void* an die Callback-Methode übergeben werden.

Ich habe eine Callback-Methode implementiert:


BOOL CALLBACK myCallBackMethod(HWND hwnd, void* srcdata, MAGIMAGEHEADER srcheader, void* destdata, MAGIMAGEHEADER destheader, RECT unclipped, RECT clipped, HRGN dirty) {
	

	return true;
}

Beim Return habe ich einen Breakpoint gesetzt, und in den Parametern steht auch verwertbares drin (hoffe ich), allerdings kenne ich mich nicht so gut mit C++ aus.

Meine Frage ist jetzt, wie ich die zurückgegebenen Daten in ein Bitmap und am besten noch gescheit ins C# bekomme. Also ein C# delegat als Callback wäre wahrscheinlich am sinnvollsten für mich aber ich bin froh über alles was funktioniert.

Achso, als ich nach dem Breakpoint weitergelaufen lassen habe, hat mein Desktop nicht mehr reagiert, kein Fenster wurde mehr angezeigt, so dass ich rebooten musste, vielleicht weiß ja jemand was da passiert ist.


Gruß -Hades-

Thema: BitBlt dauert unter bestimmten Umständen (Aero?, Windows 8?) zu langsam
Am im Forum: Grafik und Sound

Weiß da niemand einen Rat?

Thema: BitBlt dauert unter bestimmten Umständen (Aero?, Windows 8?) zu langsam
Am im Forum: Grafik und Sound

Ah ok,

dann weiß ich auch nicht genau warum das bei mir damals langsamer war. Allerdings besteht ja noch immer das Ausgangsproblem mit Aero beziehungsweise dem WDM...

Thema: BitBlt dauert unter bestimmten Umständen (Aero?, Windows 8?) zu langsam
Am im Forum: Grafik und Sound

Hallo Herbivore,

CopyFromScreen habe ich seinerzeit als erstes getestet, da es der einfachste Weg war, allerdings war das extrem langsam verglichen zu BitBlt. Hat sich das mittlerweile geändert?

Thema: BitBlt dauert unter bestimmten Umständen (Aero?, Windows 8?) zu langsam
Am im Forum: Grafik und Sound

Hallo BernFfm,

also wenn Aero in Windows 8 deaktiviert ist dann ist das anscheinend nicht mein Problem. Es ist nur so, dass das Problem des langsamen Pixelauslesens immer dann auftritt wenn (unter Windows 7/ XP) Aero aktiv ist. Der Windows Desktop Manager ist wohl irgendwie dran Schuld weil die Fenster der einzelnen Prozesse separat behandelt werden.
Wie dem auch sei, kennt jemand das Problem und weiß eine Lösung dafür?

Thema: BitBlt dauert unter bestimmten Umständen (Aero?, Windows 8?) zu langsam
Am im Forum: Grafik und Sound

Hallo,

ich habe ein paar Programme die Pixeldaten des Bildschirms per BitBlt() der GDI32 auslesen um z.B. eine Lupe zu realisieren.
Bis Windows 7 konnte man Aero (WDM) deaktivieren. Ist Aero aktiv dauert das auslesen per BitBlt unverhältnismäßig lange und ist für mich so einfach zu langsam. Ich bin jetzt auf Windows 8 umgestiegen, kann Aero dort allerdings nicht deaktivieren...

Weiß jemand wie man BitBlt auch mit aktiviertem Aero performant hinbekommt? Ich möchte auch nicht meine Programme alle komplett umschreiben also wäre eine ANpassung der vorhandenen Methoden wünschenswert.

Gruß
-Hades-

Thema: Control position reative to image position
Am im Forum: GUI: Windows-Forms

Yeah CoLo,

unbestechliche Logik! Vielen Dank, jetzt funktioniert es perfekt. Das macht natürlich Sinn, ich habe ja im Prinzip deinen Ansatz für die Berechnung der Breite und Höhe genutzt, nur etwas unschöner, aber es hat geklappt.
Den Breiten- und Höhenfaktor für die neue Position zu nutzen war genau das was mir nicht in den Sinn kam, wobei das natürlich so sein muss.

Nochmal vielen Dank für die Lösung CoLo. :)

Thema: Control position reative to image position
Am im Forum: GUI: Windows-Forms

Hallo Herbivore,

ja da hast du vollkommen Recht, selber zeichnen ist eine Lösung. Allerdings auch etwas viel Aufwand für Sachen die ich vielleicht morgen schon wieder verwerfe...

Wäre es auch eine Lösung wenn ich der PictureBox des kleinen Bildes dieselben Ausmaße wie der großen gebe und das Image nur aus dem Fußball und sehr viel Transparenz drumherum besteht? Dann müsste die Größe und Position ja passen oder?