Laden...

Forenbeiträge von cluening Ingesamt 75 Beiträge

30.08.2012 - 22:41 Uhr

verwendetes Datenbanksystem: SQL CE, MySQL?

Guten Abend,

brauche mal Euren Rat.

Ich entwickele derzeit eine Desktop Applikation um Mitglieder u. Termine einer Organisation zu verwalten. Die Anwendung soll auf mehreren örtlich von einander getrennten Desktop PC's installiert werden. Jede Installation soll ihren eigenen Datenbestand besitzen um ein Offline Arbeiten zu ermöglichen. Bei bestehender Verbindung od. Userinitiert sollen dann die Daten an einer zentralen Stelle zusammen laufen. Die zentrale Stelle könnte entweder ein FTP Server sein od. eine MySQL Datenbank. Nach einiger Suche im Netz und hier im Forum bin ich über die SQL CE für die offline verfügbaren Clientdatenbanken gestolpert. Ebenfalls war das MS Sync Framework ein Thema.

Bisher bin ich jedoch nicht schlau geworden ob es, relativ einfach möglich ist die Client Datenbanken mit der Server MySQL Datenbank zu synchronisieren.

In diesem Thread hatte jmd. ein ähnliches Problem jedoch ist nicht zu erkennen welchen genauen Weg er nun eingeschlagen hat. SQL: Synchronisierung zweier Datenbanken

Kann man mit der Kombination SQL CE + MySQL + MS Sync Framework glücklich werden? Habt ihr Erfahrungen in dem Bereich?

Vielen Dank!

06.02.2012 - 19:48 Uhr

Hallo Forum,

ich habe eine Frage zum Visual Studio Publish Verfahren.

Habe eine Silverlight Anwendung mit mehreren MEF Modulen. Einige dieser Module verwenden einen eigenen Webservice. Habe also eine Solution mit mehreren Webservices und einer Webanwendung. Bisher gehe ich hin und sage für jeden Webservice einzeln: Veröffentlichen und dann noch einmal auf der Webanwendung.

Auf Dauer ist dies ziehmlich nervig, denn es werden u.U. noch mehr Webservices in der Solution.

Hat jmd. von Euch dafür eine Lösung?

Gruß
cluening

05.01.2012 - 13:45 Uhr

Hi Forum,

ich habe eine Anforderung dynamische SQL Abfragen gegen einen Webservice zu schicken und das Ergebnis dieser Abfrage am Client bspw. in einem DataGrid darzustellen?

Gibt es Eurer Meinung nach einen Weg dynamische Daten über einen Webservice zu übertragen. Zur Entwicklungszeit sind mir diese Abfragen noch nicht bekannt, so dass ich typisierte Methoden daraus erzeugen könnte.

Wäre also so in etwa wie ein SQL Editor für Silverlight!

Danke und Gruß
cluening

26.10.2011 - 22:50 Uhr

Hallo gfoidl,

erneut vielen Dank für deine Antwort.

Wie stellst du die fertigen Release Assemblies dann unter VCS? Checkst du einfach den Release Ordner mit ein oder hast du ein gemeinsamen Ordner für deine Assemblies die du eincheckst.
Bspw. C:\assemblies\

LG
cluening

26.10.2011 - 21:38 Uhr

Hallo gfoidl,

vielen Dank für Deine Antwort!

Angenommen ich würde dies über Contract Assemblies lösen. Wie würde ich dann die Verweise hinzufügen? Verweise ich auf das Projekt in der Solution oder verweise ich auf die eingecheckte Version der Assembly? Und falls ja sollte diese dann in der Debug oder Release Version vorliegen? Oder ist die Debug Assembly 1-zu-1 Austauschbar gegen die Release Assembly? Welche Version würdest Du unter Versionsverwaltung stellen?

Nochmals vielen Dank für die Antwort!

Gruß
cluening

26.10.2011 - 21:05 Uhr

Guten Abend zusammen,

ich bin auf der Suche nach ein paar Ideen bzw. Anregungen zum Handling mit mehreren Abhängigkeiten von Projekten (Assemblies) untereinander. Ich habe eine größere Anwendung die aus mehreren kleineren und mittleren Assemblies (insgesamt ca. 40 einzelne Klassenbibliotheken) besteht. Diese Klassenbibliotheken werden von mehreren Entwicklern in einem Team entwickelt und stehen natürlich auch in Abhängigkeit zueinander. Die einen mehr die andern weniger.

Ich habe aber noch keine zufriedenstellende Möglichkeit gefunden wie ich die Abhängigkeiten untereinander definieren soll. Habe bisher folgende Dinge ausprobiert:

Alle 40 Projekte in einer Solution zusammengefasst und die Abhängigkeiten dann als Projektverweise hinzugefügt. Hat für mich den Vorteil Visual Studio hat die Buildreihenfolge selber analysiert und eingehalten. Außerdem brauche ich so nur einmalig zwischen Debug u. Release umschalten. Hat aber auch den Nachteil für mich das wenn ich etwas an einer Basis Assembly ändere dass sich die anderen 30 Projekte die darauf verweisen mit neubauen, was ich aber für den aktuellen Entwicklungsschritt gar nicht brauche. Außerdem ist die komplette Solution unübersichtlich. Außerdem benötigen diese komplette Solution immer alle Entwickler im Team.

Als weitere Möglichkeit hatte ich ausprobiert die Assemblies nach dem Build per Postbuild Event in einen gemeinsamen Ordner zu kopieren. Bspw. ein Netzlaufwerk. Hat den Vorteil die abhängigen DLL's sind immer auf dem neusten Stand für alle Entwickler. Hat aber auch wieder Nachteile wie bspw. das Umschalten von Debug auf Release ist nicht mehr so einfach, da die Abhängigkeiten nicht automatisch mit umgeschaltet werden von Debug auf Release.

Ich würde gerne von Euch wissen wie ihr die Abhängigkeiten unter einander definieren würdet bzw. wie ihr das macht?

30.08.2010 - 09:31 Uhr

Und u.U. führen auch Leerzeichen im Pfad des aufzurufenden Programms zu Fehlern. Aber dann eher zu FileNotFound oder so etwas in der Art.

28.08.2010 - 21:29 Uhr

Vielen Dank für Eure Beiträge.

Also wäre es sinnvoller die DAL gleich auf DataTables umzustellen. Und dann würde ich die Events des DataTables nutzen. Das würde dann aber bedeuten dass ich eigentlich gar keine Business Objekte benötigen würde oder?

Angenommen ich möchte eine Liste von Personen anzeigen dann hätte ich die Personen ja als untypisierte DataRows im DataTable oder sehe ich das falsch? Ich hätte also nicht zwingend ein Objekt Person?

Gruß
cluening

28.08.2010 - 09:48 Uhr

Hallo Forum,

vielleicht habe ich momentan ein Brett vorm Kopf 🤔 ich hoffe mal einer von Euch kann mir bei meinem "Problem" helfen.

Ich habe meine Data Access schicht, diese liest Daten aus einer DB, XML oder so aus und verpackt diese in eine List<T>. Wenn ich nun diese List<T> an die Oberfläche bringen möchte, hab ich gelesen ist es sinnvoll sich daraus ein DataSet, DataTable, BindingSource Konstrukt zu bauen. Ok hab ich soweit gemacht...

Wenn ich nun aber über bspw. ein DataGridView Daten ändere werden diese ja zunächst nur in der BindingSource und der DataTable geändert? Wie aber bekommen dann meine List<T> Objekte davon Wind dass in der DataTable Änderungen gemacht werden? Muss ich diese nachträglich wieder als List<T> aus dem DataTable generieren? Da meine DataAccess Schicht eigentlich nur mit Listen umgehen kann?

Gruß
cluening

10.12.2008 - 09:05 Uhr

Hallo rainbird,

danke für die Antwort, ich hab sie gerade erst entdeckt 🙂
Das ist eine Klasse einer firmeninternen Bibliothek. Man kann sich das vorstellen wie einen Ringpuffer. Habe in der Zwischenzeit herausgefunden, dass es auf bestimmten Rechnern läuft und auf bestimmten anderen nicht. Auf denen wo es nicht läuft, könnte es daran liegen, dass die Bibliothek in zwei Versionen vorhanden ist und noch "Müll" in der Registry steht.

Anscheinend kann man mit dem Objekt weiterarbeiten, wenn man die Properties im Debugger nicht anzeigen lässt (abfragen und speichern in eigenen Variablen ist kein Problem). Scheiss Abhängigkeiten zu anderen Modulen und dann noch in verschiedenen Versionen. Manchmal sollte man doch über den Sinn und Unsinn von Softwarewiederverwendung besser nachdenken. 🤔

Gruß
cluening

03.12.2008 - 09:28 Uhr

Hallo zusammen,

ich habe ein komisches Verhalten mit COM-Objekten. Mir liegt eine PIA einer anderen Softwarekomponente vor. Das Anlegen von Objekten aus dieser PIA funktioniert auch erstmal.


PIAClass piaObj = new PIAClass();
piaObj.Configure(5,1,5000);

funktioniert auch. Im piaObj kann man die Properties auslesen und die stehen auch wie reingeschrieben drin! Nun verpacke ich dieses piaObj in ein Dictionary<string, PIAClass>. Bis hier hin funktioniert alles wunderbar!

Wenn ich das verpackte Objekt nun wieder aus dieser Liste raushole kann ich mir im Debugger noch genau 1 mal die richtigen Eigenschaften des Objekts angucken. Bei einem zweiten Aufklappen (an der gleichen Breakpointstelle, 1 sek. später) der Eigenschaften im Locals Fenster des Visual Studios sind alle Werte auf 0 zurückgesetzt die ich vorher aber mit 5, 1 und 5000 gesehen habe.

  • Wird das COM-Objekt vom GarbageCollector nach der ersten Verwendung weggeräumt?
  • Kann man COM-Objekte nicht in Listen verpacken? Oder muss ich dazu noch irgendwas am Lifecycle verändern (PIA, liegt nicht an meiner Verantwortung)?
  • Vielleicht hat von Euch ja noch jemand eine Idee.

Gruß
cluening

29.07.2008 - 15:15 Uhr

Unter Umständen könnten dir die Klassen: FileInfo und DirectoryInfo weiterhelfen

29.07.2008 - 15:09 Uhr

Vielen Dank für die schnelle Antwort!

Und wenn dort mehrere verschiedene Fehler auftreten können, würdest du dann die Exception noch in ein EventArgs Objekt verpacken? Oder jeweils ein eigenständiges Event dafür definieren?

Gruß
cluening

29.07.2008 - 15:01 Uhr

Hallo Community,

ich benötige mal einmal euren Rat.

Und zwar möchte ich von meinem Main-Thread zwei weitere Threads starten. In einem dieser Threads soll bei einem Fehlerfall eine Exception geworfen werden. Diese Exception würde ich aber gerne in dem Mainthread behandeln.

  1. Main-Thread startet Thread 1
  2. Main-Thread startet Thread 2
  3. Thread 1 wirft Exception
  4. Main-Thread behandelt Exception

Bisher bekomm ich immer eine Unhandled Exception! Ich hab schon nen bisschen im Internet rumgesucht und bin darauf gestoßen das Application.Thread Exception Event zu nutzen. Bin mir aber noch nicht ganz sicher ob es das erfüllt was ich genau suche.

Oder sollte ich evtl. ein Event anstelle einer Exception nutzen? Dass ich ein Event auslöse, wenn der Fehler auftritt. Das wäre zwar wahrscheinlich nicht im Sinne des Erfinders, aber vllt. die einfachste Lösung?

Was meint ihr dazu?

Vielen Dank
cluening

15.05.2008 - 11:18 Uhr

Ich hab nach weiterer Recherche, die Möglichkeit über CreateEvent, SetEvent in C++ gewählt. Diese kann ich dann über DllImport der Methode OpenEvent in C# nutzen.

Gruß
cluening

15.05.2008 - 09:49 Uhr

Hi,

hast du schon die Property CurrentCell gesehen?

Gruß
cluening

15.05.2008 - 09:29 Uhr

Hallo Community,

beschäftige mich derzeit mit der IPC zwischen C++ und C#. (Wie der ein oder andere schon in anderen Threads von mir gesehen hat 😄) Diesmal benötige ich evtl. nur einen Hinweis auf ein Themengebiet. Und zwar zeichne ich in einer unmanaged C++ dll Daten auf und stelle diese über ein Memory Mapped File zur Verfügung. Wenn neue Daten vorhanden sind möchte ich gerne die C# Applikation darüber benachrichtigen. Wie kann ich so ein Event in C++ auslösen und in C# verarbeiten?

Ist Hooks das richtige Stichwort? Ich hab nur kurz hinterher geguckt und hab das noch nicht so ganz verstanden worum es dabei genau geht.

Oder gibt es eine andere Möglichkeit?

Vielen Dank
cluening =)

15.05.2008 - 09:23 Uhr

Sorry das ich mich so lange nicht gemeldet habe. Die C++ dll ist unmanaged. Ich werd sie jetzt wohl 2 mal definieren.

Vielen Dank für Eure Antworten!

09.05.2008 - 13:57 Uhr

Hallo Community,

ich bins schon wieder 😉

Gibt es eine ellegante Möglichkeit ein struct für C++ und C# nur einmal zu definieren?
D.h. beide "Welten" können darauf zugreifen und so konsistent damit arbeiten? Oder muss ich die beiden Structs unabhängig von einander, also in C++ und auch in C# pflegen?

*hinzufüg😘
Mit Headerfiles geht es ja leider nicht
*/hinzufüg*

Gruß
cluening

09.05.2008 - 10:49 Uhr

Hallo,

erstmal vielen Dank für deine Antwort. Ich bin durch deinen Code auf eine andere Idee gekommen. Und zwar hab ich nochmal weiter mit den Readern rumprobiert. So ging es dann:


  BinaryReader binaryReader = new BinaryReader(stream);
            long bAcht =  binaryReader.ReadInt32();
            Console.WriteLine("Count: " + bAcht);

            double[] data = new double[bAcht];

            for (int i = 0; i < bAcht; i++)
            {
                data[i] = binaryReader.ReadDouble();
                Console.WriteLine(data[i]);    
            }

Nochmal Danke.

08.05.2008 - 16:40 Uhr

Hallo Community,

benötige für ein aktuelles Projekt den Datenaustausch zwischen zwei Prozessen. Der Datenaustausch soll wenn aus Performancegründen über Memory Mapped Files geschehen. Ich versuche mal kurz den Aufbau zu schildern:

Prozess A (produziert Daten ca. 100 double Werte je ms)
C++
|
|
Memory Mapped File
|
|
Prozess B (soll Daten entgegennehmen und darstellen)
.NET (C#)

Bisher habe ich unter C++ folgendes mal gemacht:

		
schreibeDaten(double * newData, long len)
long dataLength = 0x01400000-sizeof(long); 
		// Length of memory map
		if (len<=dataLength)
		{
			memcpy(PointerData, newData, len*sizeof(double));
			setLength(len);
		}

PointerData zeigt dabei auf den Anfang des Memory Mapped Files. Wenn ich der Methode nun so aufrufe:


double data[] = {2,1,2,3,4,5,6,7,8,9};
schreibeDaten(data, 8)

packt er mir die Werte des double Arrays auch in das Memory Mapped File rein. Das hab ich mit einer Leseroutine unter C++ geprüft.

Auf C# Seite kann ich mit Hilfe des unter http://www.winterdom.com/dev/dotnet/index.html FileMap-Komponente auch auf den gleichen Speicherbereich zugreifen.


Stream view = map2.MapView(MapAccess.FileMapRead, 0, MAX_BYTES / 2)
int b = view.ReadByte();

Bei b kommt dann 8 raus. Die ich oben in schreibeDaten ja auch übergeben habe. Aber ich möchte vielmehr an das darunterliegende double Array kommen? Weiß jemand rat? Wahrscheinlich ist es so trivial, dass ich den Wald vor lauter Bäumen nicht mehr sehe...

Vielen Dank

22.10.2007 - 12:56 Uhr

Gibts schon Neuerungen?

Gruß
cluening

22.10.2007 - 11:08 Uhr

Hallo zusammen,

ich möchte mit einer C# Applikation aus einem TikiWiki CMS eine Datei downloaden.
Das Problem was sich mir dabei stellt ist, das ich mich zunächst auf der Seite anmelden muss und dann anschließend mit der gleichen Session den Download starten muss.

Ich habe es bisher über WebClient und den NetworkCredentials probiert. Leider ohne Erfolg. Gelesen hab ich auch das man einen Login über den Webbrowser machen könnte nur wie komme ich danach weiter?

Wie kann ich das lösen gibt es andere Vorschläge?

Gruß
cluening

29.06.2007 - 17:35 Uhr

Ich habe meinem DataGridView als DataSource eine BindingSource zugewiesen.
Diese wiederrum enthält eine ReadOnlySortingBindingList (Implementierung der BindingList<>). Soweit so gut. Hinzufügen von Person Objekten an die Liste klappt ja auch noch sehr gut. Nur wenn es darum geht Daten aus der BindingList zu löschen kommt das DGV wohl nicht mit. Ich bekomme folgende Fehlermeldung:

The following exception occured in the DataGridView:

System.IndexOutOfRangeException: Index 23 does not have a value.
at System.Windows.Forms.CurrencyManger.get_Item(Int32 index)
at System.Windows.Forms.DataGridView.DataGridViewDataConnection.GetError(Int32 rowIndex)

To replace this default dialog please handle the DataError event.

Also die BindingList löscht das Objekt ansich lässt aber wohl die Zeile im DGV stehen, die dann natürlich leer ist. Gehe ich jetzt mit der Maus über die Zeile dann kommt die Fehlermeldung boing. Wenn ich versuche die Zeile manuell zulöschen kommt ne Exception das ich das nicht darf solange als DataSource eine Liste vorhanden ist.
Irgendwie ist das komisch.

Vielleicht hat von euch ja einer ne Idee wie man die leere Zeile im DGV vermeiden kann

26.06.2007 - 21:49 Uhr

Ich hab jetzt doch noch eine Frage, ich habe in einem DGV mehrere Datentypen d.h. es können einmal Personen aber auch Artikel sein. Jedoch nicht gleichzeitig. Wie würdet ihr das am saubersten lösen? Mit typeof von dem Objekt. Ich habs bisher über den Namen des DGV gemacht aber das kann ja nicht sinn der Programmierung sein oder?

26.06.2007 - 16:16 Uhr

Boing vornkopphau es ist 3 Monate hin seit dem ich das letzte mal C# programmiert hab. Es gibt ja CurrentRow und darüber gehts mit dem Index.

26.06.2007 - 16:04 Uhr

Und wie bekomme ich jetzt genau das selektierte Objekt aus meiner BindingList?
Also wenn cih in der Tabelle eine Zeile selektiere und dann über rechte Maustaste bspw. das darunterliegende Objekt haben möchte?

Also ich weiß das ich dann über das dgv an die data source komme und darüber an die bindinglist aber wie komme ich an die zeilennummer das ich den index an die bindinglist übergebe?

Gruß
cluening

26.06.2007 - 12:59 Uhr

Vielen Dank für Eure antworten.

25.06.2007 - 23:52 Uhr

Hallo zusammen,

ich bin auf der Suche nach einem geeigneten Lösungsweg.
Und zwar möchte ich mehrere Objekte des Typs Person in einem DataGridView anzeigen lassen. Die Daten kommen ursprünglich auch einer lokalen Accessdatenbank. Ich möchte das Objekt nachher auch wieder aus dem DataGridView rausholen können um dann auf die Propertys zugreifen zu können.

Also was ich bisher rausgefunden habe ist, das es mit einem BindingSource wohl am besten gehen könnte. Dann würde ich der BindingSource an eine List<T> bzw. BindingList<T> hängen. Gibt es dafür eine fertige Lib die das Sortieren für mich übernimmt? In dem Person Objekt hängen nur string, int und decimal werte.

Wie mache ich das am elegantesten?
Bin für jede Hilfe dankbar, auch wenn es nur der Hinweis auf die Suchfunktion mit den richtigen Schlagwörtern ist.

Vielen Dank
cluening

05.06.2007 - 13:06 Uhr

Leider nein

31.05.2007 - 16:15 Uhr

Hallo zusammen,

ich habe eine COM-Wrapper in Form eines ATL-Projektes. Diese COM-DLL kapselt zwei weitere DLLs. Mein Client ist ein C#-Client. Nun möchte ich von der Client-Seite eine Funktion auf Server-Seite aufrufen. Diese Funktion besitzt Defaultparameter, die in C# ja nicht vorhanden sind. Da dachte ich mir ich mal es mit Type.Missing. Da als Parameter aber ein String (bzw. BSTR) erwartet wird und das Type.Missing ein Object liefert, bekomme ich natürlich ein Exception. Wie bekomme ich es hin, das die Default-Parameter genutzt werden ohne, das ich eine Cast-Exception bekomme?

Gruß

cluening

21.05.2007 - 13:21 Uhr

Hallo herbivore,

vielen Dank, scheint erstmal zu funktionieren 🙂

Mgf

Cluening

21.05.2007 - 13:02 Uhr

Hallo herbivore,

ja, genau ich mache das mit CreateElement und ich arbeite halt mit XmlAttribute um für die einzelnen Elmente Attribute hinzuzufügen. Für das XmlAttribute kann man ja die Eigenschaft VALUE benutzen und einen String zuweisen. Ich mach das immer mit ToString().

Cluening

21.05.2007 - 12:27 Uhr

Hallo zusammen,

also das Schreiben mach ich über ein XmlDocument und das Erzeugen der Nodes jeweils mit XmlNode bzw. XmlElement. Speichern nachher halt über XmlDocument save(). Sollte also der DOM-Weg sein.

Mfg

Cluening

21.05.2007 - 11:53 Uhr

Hallo zusammen,

ich habe eine Frage bzgl. Zahlenformatierung. Also ich möchte double-Werte in eine XML-Datei schreiben. Als Trennzeichen soll jedoch nicht das Komma, sondern der Punkt verwendet werden. Folgendes habe ich schon versucht, funktioniert aber nicht (vor dem Schreiben):


Thread.CurrentThread.CurrentUICulture = new CultureInfo("en");
            Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");

mfg

cluening

26.04.2007 - 09:19 Uhr

Funktioniert bis auf an einige Stellen ganz gut. Aber das bekomme ich auch noch
rausgebügelt.
Besten dank.

25.04.2007 - 13:24 Uhr

Hallo zusammen,

ich bin auf der Suche nach einer Möglichkeit den Text von einer Tabpage
zu ändern wie bei Excel die Arbeitsblätter. Also sprich ich möchte per
Doppelklick auf den Header der Tabpage klicken und dann soll sich der Text
editieren lassen. Gibt es da eine Möglichkeit?

Gruß
cluening

01.12.2006 - 10:20 Uhr

Hallo zusammen,

ich habe seit längerer Zeit ein Problem, wo ich nicht weiß wie und ob ich es jemals in den Griff bekomme oder ob es ein Bug ist mit dem man sich abfinden muss.
Also ich habe ein DataGridView für diese ist FULLROWSELECT, SINGLE_SELECTION,
FILL, ALLOW_USER_TO_REORDER, ALLOW_USER_TO_RESIZE_COLUMNS und SORTIEREN eingestellt. Jetzt möchte ich alle 30SEK. neue Daten in das DGV bringen. Dies habe ich über DataTables und BindingSources realisiert.

Ich hatte vorher das Problem, dass beim Befüllen mit neuen Daten immer die VISIBLE_AREA sich verändert hat. D.h. es wurde immer zur Selektion gesprungen, wenn neue Daten kamen.


// Alle 30Sek.
private void Aktualisiere() {

if (this.dataGridView1.SelectedRows.Count != 0)
{
       int pos2 = this.dataGridView1.FirstDisplayedScrollingRowIndex;
}

//pos2 = bindingSource.CurrencyManager.Position;
dataTable = new DataTable();
dataTable.Columns.Add("test1");
dataTable.Columns.Add("test2");
dataTable.Columns.Add("test3");
dataTable.Columns.Add("test4");
dataTable.Columns.Add("test5");
dataTable.Columns.Add("test6");          

for (int i = 0; i < 2000; i++)
{
   dataTable.Rows.Add(i, "foo", i, i + " zeile", i, i);
}


bindingSource.DataSource = dataTable;
dataGridView1.FirstDisplayedScrollingRowIndex = pos2;
} 

Durch das obige Beispiel konnte ich nun verhindern das beim Befüllen zur Selektion gesprungen wurde und der Benutzer beim Aktualiseren nicht die Sicht auf seine Daten genommen wurde. Es blieb also der Bereich nach dem Aktualisieren für ihn VISIBLE, egal ob er etwas selektiert hatte oder nicht.

Problem bei der obigen Lösung ist nun wieder, das der Scrollbalken erst unkontrolliert sich zur Selektion scrollt und dann wieder in den Sichtbaren bereich geht.

30.11.2006 - 13:52 Uhr

Hallo zusammen,

ich habe ein DataGridView dessen Daten in einem Thread ständig aktualisiert werden.
Bevor ich die Daten neu setze merke ich mir über:
FirstDisplayedScrollingRowIndex Die Position und setze sie anschließend auch wieder
so.
Funktioniert auch solange meine Oberfläche im normalzustand ist das heißt:
1024 * 768. Wenn ich die Oberfläche jedoch maximiere springt die Scrollbar
immer hoch und nach dem holen der neuen Daten wieder runter.

Hat jemand eine Idee woran das liegen könnte, das die Scrollbar dauernd hoch
und runter springt?

Gruß
cluening

27.11.2006 - 10:26 Uhr

Das könnte schon die Lösung gewesen sein.
Erstmal danke für die fixe Antwort.

Gruß

Cluening

27.11.2006 - 09:39 Uhr

Hallo zusammen,

ich habe mal eine Frage die mir in einem Projekt arge Kopfschmerzen bereitet.
Und zwar schicke ich über ein CLI Anfragen an einen Server. Dieser Server tut sich aber sehr schwer mit der Verarbeitung der Daten, d.h. er antwortet nur sehr träge.
Ist die Anfrage ersteinmal gemacht worden, dann antwortet er sehr schnell, da er diese Ergebniss aus dem Cache holt. Das Problem ist einfach, dass wenn ich das CLI-Kommando über die Process Klasse abschicke und mit WAITFOREXIT auf das Ende der Anfrage warte, die ganze Applikation hängt. Ich würde dem Benutzer gerne zeigen,
dass die Applikation noch läuft z.B. über das Ausgeben von Zwischenergebnissen.
Dies wird jedoch nicht möglich, da der Main-Thread halt auf das Beenden des Prozesses wartet und in dieser Zeit jegliche Aktivitäten verwehrt. Gibt es eine Möglichkeit dem Benutzer den Fortschritt anzuzeigen, trozt der WAITFOREXIT-Methode. Die Lösung mit dem WAIT-CURSOR finde ich nicht so toll, da dieser nicht wirklich über den Fortschritt aufklärt und dem Benutzer auch nicht den Fortschritt mitteilt.

Vielen Dank für alle Antworten

Gruß

Cluening

16.11.2006 - 11:45 Uhr

dataGridView1.DataSourche = meinDataTable;

16.11.2006 - 10:25 Uhr

Hallo zusammen,

ich möchte meinem Benutzer zeigen, dass ein Register nicht anwählbar ist, deswegen soll das Reister augegraut sein und dan Panel nicht anwählbar.
Es gibt schon was fertiges von einem Mick, hab das auch runtergeladen aber hin und wieder tritt in seiner Bibliothek ein NullPointerException auf. Hat irgendwas mit dem WndProc() zu tun. Deshalb bleibt mir nur die Möglichkeit es selbst zu zeichnen. Hat da jemand was fertiges, weil ich absolut nicht weiß, wei ich das sauber hinbekommen soll!!

Gruß

Cluening

15.11.2006 - 09:24 Uhr

Ahh jetzt hab ich das gesehen, dass alle Fenster im Hintergrund den Close-Button ausgegraut haben. Aber wie bekomme ich das nur für die sichtbare DOS-Box hin?

Guß

Cluening

15.11.2006 - 08:47 Uhr

Mmmh, hab das mal so probiert. Mach ich was falsch?
Jedenfalls funktioniert das nicht.


using System;
using System.Text;
using System.Runtime.InteropServices;
using System.Diagnostics;

class DisableClose
{
    [DllImport( "user32.dll", SetLastError=true )]
    private static extern IntPtr GetSystemMenu(IntPtr handleMenu, bool revert);

    [DllImport( "user32.dll", SetLastError=true)]
    private static extern bool DeleteMenu(IntPtr handleMenu, uint position, uint flags);

    [DllImport( "user32.dll", SetLastError=true)]
    private static extern bool EnumWindows( EnumWindowsProc callbackFunc, string param );

    [DllImport( "user32.dll", SetLastError=true)]
    private static extern int GetWindowText( IntPtr handleWindow, StringBuilder windowTitle, int windowTitleLength );

    private delegate bool EnumWindowsProc( IntPtr handleWindow, string param );

    private static uint SC_CLOSE = 0xF060;
    private static uint MF_BYCOMMAND = 0x00000000;

    public static void Main( string[] args )
    {
        //if( args.Length != 1 )
        //{
        //    Console.Out.WriteLine( "give me a window title!" );
        //    return;
        //}

        DisableClose closer = new DisableClose("");
    }

    public DisableClose(string windowTitle)
    {
        Console.WriteLine("Konstruktor");
        Process proc = new Process();
        proc.StartInfo.FileName = "cmd";
        proc.StartInfo.Arguments = "/c start \"Test\" /WAIT echo test";
        proc.StartInfo.CreateNoWindow = false;
        proc.Start();
        EnumWindowsProc handler = new EnumWindowsProc(this.EnumWindowsProcHandler);
        EnumWindows(handler, windowTitle);
    }

    private bool EnumWindowsProcHandler( IntPtr handle, string param )
    {
        StringBuilder windowTitle = new StringBuilder( 256 );
        if( GetWindowText( handle, windowTitle, windowTitle.Capacity ) > 0 )
        {
            if( windowTitle.ToString().Contains( param ))
            {
                Console.Out.WriteLine( "Disabling Close Button in Window: {0}, {1}", handle, windowTitle );
                IntPtr handleMenu = GetSystemMenu( handle, false );
                DeleteMenu( handleMenu, SC_CLOSE, MF_BYCOMMAND );
            }
        }

        return( true );
    }
}


Gruß

Cluening

14.11.2006 - 20:40 Uhr

Nachtrag:

Du könntest es aber auch per Kommandozeile alles mitgeben
beispielsweise so:

MeinProgramm.exe 12 + 12

und dann einfach über args[0], args[1] und args[2] abfragen

14.11.2006 - 20:39 Uhr

Und was ist jetzt deine Frage?
Falls du wissen möchtest wie dein Rechner die Operation selbstständig erkennt,
musst du dir das Zeichen per ReadLine() holen
und danach entscheiden.

Denk aber gleich an DIVISION BY ZERO

Gruß
cluening

14.11.2006 - 13:22 Uhr

Also das hidden geht über die Option "WindowStyle" für das Process-Objekt.
Also:


Process proc = new Process();
            proc.StartInfo.UseShellExecute = true;
            proc.StartInfo.FileName = "cmd";
            proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;

14.11.2006 - 12:03 Uhr

ja ok, dass stimmt schon. Nur ich spreche über die Dos-box mit einem Python-Interpreter und lass darüber sachen kompilieren usw. Und ich will nur verhindern dass aus versehen auf x gedrückt wird. mutwillig ist alles möglich. das hidden von dosboxen ist für mich keine lösung, da diese auf jeden fall auf dem bildschirm angezeigt werden sollen, damit sofort sieht wenn was fehlschlägt.

Gruß

Cluening