Laden...

Forenbeiträge von lupus Ingesamt 37 Beiträge

15.10.2009 - 13:11 Uhr

Hi,
ich bin mit einem Beispielprogramm zurück. Es ist wirklich nur sehr einfach gehalten. Ich habe mich an dem oben genannten Link orientiert.

Es gibt ein Control, welches ein DataGridView enthält. nutzt man dieses Control kann man das enthaltene Grid bearbeiten. Die Columns kann man über einen eigenen UIEditor bearbeiten. Die Serialisierung wird hier von Hand angestoßen, da dies nicht automatisch geschieht. Zur Serialisierung wurde der oben verlinkte Serialisierer verwendet, welcher derzeit nur die Breite einer Column speichert.

Viel Spaß damit.

Viele Grüße,
lupus

02.10.2009 - 00:44 Uhr

Hi,
klar kann ich machen. Könnte aber noch eine Weile dauern.

Grüße

30.09.2009 - 12:11 Uhr

Kleines Update.

Für alle die es interessiert, habe ich eben diese Seite gefunden:
http://www.devnewsgroups.net/group/microsoft.public.dotnet.framework.windowsforms/topic57961.aspx

Das werde ich als nächstes versuchen.

23.09.2009 - 12:48 Uhr

OK gelöst.


public abstract class Test<Gen1, Gen2>
   where Gen1 : new() 
   where Gen2 : List {
}

Wie gesagt Wald und Bäume.

23.09.2009 - 12:42 Uhr

Hey.
ich glaube ich sehe den Wald vor lauter Bäumen nicht und in der c#-Doku habe ich nichts gefunden. Ich möchte mehrere generics in einer Klassendefinition nutzen:


public abstract class Test<Gen1, Gen2> { 
}

Nun möchte ich für die beiden generics Contraints einführen. Für eine wäre das Konstrukt wie folgt:


public abstract class Test<Gen1, Gen2> where Gen1 : new() { 
}

Ich möchte nun so was:


public abstract class Test<Gen1, Gen2> where Gen1 : new(), Gen2 : List { 
}

Was einen Fehler produziert. Wie kann man dies realisieren. Das sollte doch eigentlich recht einfach sein.

Grüße

10.09.2009 - 13:45 Uhr

Hi,
ich habe ein kleines Problem mit eigenen Controls im Designer. Ich habe eine UserControl, in welcher ein DataGridView eingebettet ist. Mit folgender Propertie kann man auf dieses Zugreifen.


    public Control InnerControl {
      get {
        return this.mInnerControl;
      }
    }

Das funktioniert auch ohne Probleme. Wenn ich das Control im Designer verwende, kann ich auch direkt Daten des DataGrid verändern. Leider funktioniert alles bis auf die Columns. Ich könnte bisher nicht herausfinden wieso.

Es kommt folgender Fehler, wenn man auf den Expand-Button der Columns klickt:
"Object reference not set to an instance of an object."

Das würde ja bedeuten, dass die Columns oder irgendetwas davon nicht instantiiert ist. Aber eigentlich mache ich ja nichts anderes, wie der normale Zugriff über den Designer auf ein DataGridView. Wenn ich im Contruktor von Hand eine Column hinzufüge, dann wird diese im Construktor angezeigt. Allerdings bleibt der Fehler bestehen.

Ein weitere Frage hätte ich noch zu den DesignerVerbs. Kann man die der DataGridView (Spalte hinzufügen, Allow UserAddRow etc) an das Äußere Control weiterleiten?

Freue mich über anregungen.

Grüße,
lupus

12.07.2009 - 16:43 Uhr

Hallo herbivore,
danke schon mal. Sowas habe ich mir schon gedacht. Mit einer Hilfsklasse meinst du vermutliche eine, die Methoden usw., welche von vielen Controls benötigt werden, bündelt.

Grüße

12.07.2009 - 15:14 Uhr

Moin,
ich bin auf der Suche GUI-Controls möglichst schön und zugänglich zu programmieren. Dabei soll es eine Oberklasse bsp. AbstractControl geben, welche Dinge speichert, die jede Control benötigt.

Beispiel:


public abstract class AbstrcatControl {
   private string id;
   
   public string ID {
      get { return this.id; }
   } 
}

Davon sollen alle Controls wie TextBox, ComboBox etc. ableiten. Dies geht natürlich nicht, wenn man die Standard-Komponenten nutzen will, da mehrfach Vererbung nicht möglich ist. Folgendes geht also nicht:


public class MyTextBox : TextBox, AbstrcatControl {
}

Dies wäre aber die schönste und gesuchte Lösung. Nun habe ich mir zwei Möglichkeiten überlegt mit denen man das gewünschte Ergebnis bekommen könnte. Allerdings finde ich beide unschön.

Version 1:
Man regelt das ganze über ein OberInterface:


public interface IControl {  
   public string ID {
      get;
   } 
}

public class MyTextBox : TextBox, IControl {
   private string id;
   
   public string ID {
      get { return this.id; }
   } 
}

Positiv ist hierbei, dass man im Interface festlegen kann, was die implementierenden Klassen können (ein Interface halt 😉). Leider kann durch diese Architektur ein enormer Wartungsaufwand entstehen. Möchte man nun einen neue Eigenschaft einführen bzw. entfernen muss man alle Klassen wie Textbox, Combobox etc anfassen.

Version 2:
Hier kann man versuchen, die eigentlichen Controls zu verstecken:


public abstract class AbstractControl : Control {
   private Control myControl;
 
   private string id;
   
   public string ID {
      get { return this.id; }
   }

   protected registerControl(Control myControl) {
      this.myControl = myControl;
   }
}

public class MyTextBox : AbstractControl {
   private TextBox innerTextBox = new TextBox();

   public MyTextBox () {
     registerControl(innerTextBox ) 
   }
}

So kann man abstrakte Container erstellen, welche zur not auch mehrere Controls enthalten. Diese Container bündeln auch alle Eigenschaften als Oberklasse. Eigentlich eine rechte gute Version. Nur gibt es hier auch ein schwerwiegendes Problem. Möchte man nun Eigenschaften der innerTextBox ändern kann man das nicht über den Designer machen. D. h. man ändert nur die Eigenschaften der MyTextBox (bspw. Hintergrundfarbe). Man müsste also alle Eingaben, Events und Methoden der MyTextBox an die innerTextBox weiterleiten. Dies könnte auch in der AbstractControl geschehen. Dabei könnte man sogar alle Eigenschaften, welche nicht genutzt werden sollen private setzen. So kann man Controls erstellen, welche nur nach den eigenen Wünschen verändert werden können. Allerdings ist dies mit einem riesen Aufwand verbunden.

Wie man vielleicht schon gemerkt hat, gefallen mir beide Lösungen nicht. Hat vielleicht jemand eine tolle Idee. Ich habe bestimmt wieder ein Brett vor dem Kopf und es gibt eine offensichtliche schöne Lösung.

Grüße

03.06.2009 - 15:06 Uhr

Hey,
danke für den Hinweis. Habe es jetzt so gelöst:


public object LoadClass(string pAssemblyName, string pFullClassName, params object[] loadInfo) {
      try {
        Assembly a = Assembly.LoadFrom(pAssemblyName);
        return Activator.CreateInstance(a.GetType(pFullClassName, true), loadInfo);
      } catch (Exception ex) {
        Logger.Instance.Error("Fehler beim dynamischen Laden der Klasse: \"" + pFullClassName + "\"");
        return null;
      }
}

Direkt über Activator.CreateInstance konnte ich leider nicht gehen, da es keine Überladung mit Assembly und ObjectArgs gibt. Mit Assembly kann man nur den Standardkonstruktor benutzen.

Grüße

03.06.2009 - 12:52 Uhr

Hi,
ich habe folgende Problem. Ich brauche einen ClassLoader. Diese möchte ich in ein Projekt A auslagern, damit verschiedene Projekte diesen nutzen können. Folgende Funktion bietet er an:


public static object LoadClass(string pFullClassName, params object[] loadInfo) {
      try {
        Type t = Type.GetType(pFullClassName, true);
        Type[] cParamTypes = new Type[loadInfo.Length];

        for (int i = 0; i < loadInfo.Length; i++) {
          cParamTypes[i] = loadInfo[i].GetType();
        }
        ConstructorInfo c = t.GetConstructor(cParamTypes);
        return c.Invoke(loadInfo);
      } catch (Exception ex) {
        Logger.Instance.Error("Fehler beim dynamischen Laden der Klasse: \"" + pFullClassName + "\"");
        return null;
      }
    }

Das funktionier auch soweit (bspw. System.Enum). Nun möchte ich ein Projekt B, welches Projekt A nutzt um Klassen in Projekt B zu laden. Leider ist dies nicht möglich, da eine Abhängigkeit ensteht.

Projekt A braucht B, um die unbekannten Klassen zu finden.
Projekt B braucht A, um die Klassen zu laden.

Gibt es ein Pattern mit dem ich dieses Problem lösen könnte?

Viele Dank schon mal,
Grüße

20.05.2009 - 14:43 Uhr

Hey Juy Juka,
danke schon mal. Ich werde mir das dann mal zu Gemüte ziehen.

Schönen Tag noch

20.05.2009 - 14:15 Uhr

Stimmt. Bei mir passiert auch nur Werte zugewiesen. Allerdings könnte sowas ja problematisch werden, wenn man bspw. über ein TextChangedEvent arbeitet. Da kann man leicht eine Endlosschleife produzieren.

20.05.2009 - 13:57 Uhr

Hi JuyJuka,
dann möchte man sich mal an Standards halten 😃. Vielen Dank, dass heißt ich werde mir einen Umweg bauen.

Gruß

20.05.2009 - 13:44 Uhr

Hi,
ich beziehe mich im Folgendem auf diese Wikipedia Eintrag (meist auf das Diagramm):
http://de.wikipedia.org/wiki/Model_View_Controller

Mein Problem bei MVC Pattern ist, dass es meiner Meinung nach Redundanzen gibt. Vielleicht mache ich aber auch nur einen Denkfehler.

Es gibt folgendes Beispiel:

Model:*User (Name) *Wenn Name geändert wird, wird ein Event an die View gesendet, dass sich Daten geändert haben (indirekte Assoziation Model-View)

View:*Dialog zum ändern des Namens *Kennt Model, um Namen anzuzeigen (direkte Assoziation Model-View) *Wenn Eingabefeld des Names geändert wird, wird ein Event an den Controller gesendet (indirekte Assoziation View-Controller)

Controller:* Verwaltet Eingaben und leitet Daten weiter

  • Bekommt Event über Eingabe im View und setzt dann die Werte im Model und speichert es ab

Das Problem ist jetzt folgendes:* Controller bekommt Event über Eingabe im View und setzt dann die Werte im Model und speichert es ab

  • Daraufhin sendet Das Model eine Update-Nachricht an die View (es hat sich ja etwas im Model getan)
  • Im View wird registriert, dass das Model sich geändert hat und das Textfeld bekommt diesen Wert zugewiesen; ABER: der Wert steht ja eigentlich schon in dem Feld, also wird es doppelt zugewiesen

Man kann natürlich im Model Setter mit und ohne UpdateEvent feuern anbieten. Aber das scheint mir nicht sehr schön. Wird das Problem in MVC einfach nicht direkt berücksichtigt?

Viele Grüße

22.04.2009 - 14:54 Uhr

Mann, Mann. Natürlich habe ich in der Liste nachgeschaut. Allerdings finde ich diese Art und Weise mit Leuten zu reden eher suboptimal.

"Was schadet ein, ja das stimmt. Und ja es gibt eine Liste. Guck doch mal in der MSDN. Nebenbei findet man diese mit google auch sehr leicht."

Solche Antworten sind der Grund warum arme Informatik-Studenten zu SoftSkills Vorlesungen gezwungen werden 😦.

Danke Nils.

22.04.2009 - 14:38 Uhr

Man kann ja auch mal ne passende Frage zu dem aktuellen Thema stellen, oder nicht. Ist doch viel schöner mit Menschen zu kommunizieren.

Die Frage wurde übrigens nicht beantwortet 😉.

22.04.2009 - 14:26 Uhr

Hey,
was genau bewirkt der Operator |=. Bedeutet er, dass


bool b1=true;
bool b2=false;

bool bCombined=b1;
bCombined|=b2;

das gleiche wie:


bool b1=true;
bool b2=false;

bool bCombined=false;
bCombined = b1 | b2;

ist?

Was gibt es sonst noch für Operatoren. Kennt irgendwer eine Liste mit allen möglichen Operatoren?

Grüße

22.04.2009 - 12:52 Uhr

Hey,
ich hatte einen Denkfehler.

Ich wollte den Process wie folgt starten:


this.mProcess.StartInfo.FileName = "c:\\test\\java prog"
this.mProcess.StartInfo.WorkingDirectory = "c:\\test\\"
this.mProcess.StartInfo.Arguments = ""

Hierbei ist ja klar, dass er das Programm "c:\test\java Programm" nicht finden kann. Ich möchte ja java mit den Richtigen Parametern starten. Folgendes ist also richtig:


this.mProcess.StartInfo.FileName = "java"
this.mProcess.StartInfo.WorkingDirectory = "c:\\test\\"
this.mProcess.StartInfo.Arguments = "prog"

Vielen Dank trotzdem. Jetzt geht alles wunderbar.

22.04.2009 - 12:14 Uhr

Hi,
ich möchte einen Process starten. Mit exe Dateien geht das wunderbar. Als:

StartInfo.FileName

gebe ich den vollen Pfad zu der Exe an: c:\test\test.exe

Nun möchte ich allerdings eine class Datei von Java starten. Diese liegt bspw. im Ordner
c:\test\prog.class

Wenn ich diese per Console bzw. Batch Datei starte geht alles wunderbar:
c:\test\java prog

Nun dachte ich mir, dass man das ganze bestimmt auch aus c# starten kann. Also habe ich StartInfo.FileName folgenden Wert zugewiesen:
c:\test\java prog

Dies führt leider bei Starten zu einer Exception mit der Meldung, dass die angegebene Datei nicht gefunden werden konnte. Ich vermute, dass man Consolen Befehle nicht einfach absetzen kann. Gibt es dennoch eine Möglichkeit mit Prozessen und Java?

Ich benutze die process auch um die Ausgabe von Programmen abzuhören. Folgende Parameter werden noch gesetzt:


this.mProcess.StartInfo.FileName = this.mService.ProcessFileName;
this.mProcess.StartInfo.WorkingDirectory = this.mService.Path;
this.mProcess.StartInfo.UseShellExecute = false;
this.mProcess.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
this.mProcess.StartInfo.CreateNoWindow = true;
this.mProcess.StartInfo.Arguments = this.mService.Parameter;
this.mProcess.StartInfo.RedirectStandardOutput = true;
this.mProcess.StartInfo.RedirectStandardError = true;
this.mProcess.OutputDataReceived += new DataReceivedEventHandler(mProcess_OutputDataReceived);
this.mProcess.Exited += new EventHandler(mProcess_Exited);      
this.mProcess.EnableRaisingEvents = true;
this.mProcess.Start();
this.mProcess.BeginOutputReadLine();

Freu mich über alle Infos.

Grüße

03.04.2009 - 10:35 Uhr

:::

Hi. Das habe ich schon verstanden. Das Problem ist nur wie, bekomme ich die aktuelle Position in Abhängigkeit von der Scrollbar der Textbox.

Beispiel:
Der Nutzer guckt sich die Mitte des Textes an. Nun wird an den Text etwas angehängt. Dadurch wird die Selektion automatisch auf den Anfang gesetzt und der User sieht nicht mehr das zuletzt Angesehene.

Man müsste sich also theoretische bei Scrollen merken auf welcher Position die Scrollbar steht. Dann bei aktualisieren des Textes, die Selektion auf die gemerkte Position setzen.
Das Problem ist nur, wie finde ich heraus an welcher stelle der Nutzer gerade ist? Meines Wissens gibt es dafür kein Event bzw. auch keine Property, welche mir diese Position liefert.

Grüße

24.07.2006 - 15:33 Uhr

Habe schon ne Antwort gefunden. 🙂

einfach folgendes aufrufen:


System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en");
InitializeComponent();

Bei CultureInfo einfach das gewünschte Kürzel eintragen. Fasll dieses nicht gefunden wird, wird die Default-Einstellung genutzt.

24.07.2006 - 15:19 Uhr

Moin,
also folgendes Problem. Man kann Komponenten mit "Localizable" und "Language" internationalisieren. Meine Frage ist nun, wie kann man das ganze Debuggen. Ich habe nirgends in den Properties vom Projekt eine Eigenschaft gefunden bei der man die Sprache zum Debuggen angeben kann.

Hat jemand eine Idee oder muss ich für jede Sprache einen Rechner mit der entsprechenden Windows-Version haben. 🙂

Gruß

06.07.2006 - 08:49 Uhr

Hallo,

nein es sind von normalen Textboxen abgeleitete eigene Controls. Ich habe inzwischen allerdings eingige andere Dinge schneller gemacht, dass das Problem nicht mehr so auffällt.

Mit Hide and Show habe ich das gleiche Problem.

Gruß

28.06.2006 - 12:56 Uhr

🙂 mmh ich glaube du hast mich falsch verstanden. Das geht auch mit meinen beiden Versuchen. Mit ging es nur darum, wenn ich eine Methode mit dem Enum als Übergabewert erstelle und diese Methode dann aufrufe, dass mir das Studio Options dann als Vorschlag anbietet. Aber wie gesagt, dass hat sich erledigt.
Trotzdem danke an alle

28.06.2006 - 12:08 Uhr

Eigentlich wollte ich, dass man, wenn man die Methode aurruft sofort OPTION angeboten bekommt und man dann nur noch mittel '.' die gewünschte Enum wählen kann.

Ich habe es jetzt so gelöst, dass ale in einer Enum stehen. Das leigt aber nicht an meinem Problem, sondern hat andere Gründe.

28.06.2006 - 10:04 Uhr

Moin,
ich habe mir folgende Klasse (habe auch struct versucht) erstellt:


public class Option {
  public enum Default {
      Option1,
      Option2
  }

  public enum Common {
      Option1,
      Option2
  }
}

oder


public struct Option {
  public enum Default {
      Option1,
      Option2
  }

  public enum Common {
      Option1,
      Option2
  }
}

So habe ich eine Methode die wie folgt oder ähnlich aussieht:


public string GetOption (Option pOptionName)

Wenn ich jetzt die Methode aufrufe und SPACE drücke wird mir nicht dder Struct oder die Klasse Option angeboten. Liegt dies daran, dass cih mehrere Enums in diesen befinden und das Studio das nicht auflösen kann?

Gibt es eine Lösung hierfür oder ist dies nicht möglich.
Gruß

15.06.2006 - 14:14 Uhr

Moin,

ich möchte einer Usercontrol andere Control hinzufügen. Das klappt auch prima. Ich füge Label, Textboxes, und Comboboxes hinzu. Mit Hilfe von SuspendLayout und ResumeLayout versuche ich zu erreichen, dass alle Controls erst geladen werden, wenn alle hinzugfügt wurden. Das klappt auch bei allen Controls außer den Textboxes. Die Textbox wird trotz SuspendLayout gemalt.

Hat irgendwer eine Lösung?

Gruß

01.03.2006 - 08:50 Uhr

Moin,

ich habe ein Problem mit einem von mir selbst befüllten Datagrid. Sobald sich in einer Zeile eine bestimmte Zelle geändert hat soll sich das Datagrid neu laden. Dies geschieht mit der selben Funktion wie beim erstmaligen laden. Beim neuladen des Datagrid werden zunächst alle Zeilen entfernt und das alle neuen Zeilen nacheinander eingefügt. (Rows.Clear(), Rows.Add)

Ich habe es bisher mit folgenden Events probiert:
_- CellValidated

  • CellEndEdit
  • CellLeave_

Wenn ich nun aber meine Funktion zum Neuladen in einem dieser Events aufrufe beomme ich beim Rows.Clear() folgende Exeption:

InvalidOperationException

Wenn ich die gleiche Funtion von einem Button von Hand aufrufe functioniert sie allerdings ohne Probleme.
Meine Vermutung ist nun, dass während das Event abgefangen wird der Fokus noch in einer Zeile oder Zelle des Datagrid liegt. Wenn man nun diese Zeile löscht gibt es den Fehler. Ich habe schon so einiges probiert (zum Beispiel: den Fokus auf einen Butoon vorm Neuladen setzen) aber leider habe ich keine Lösung gefunden.

Hat irgendwer eine Idee.
Gruß
Lupus

12.08.2005 - 08:18 Uhr

Naja viel mehr gubt es dazu eigentlich nicht zu sagen. über die hitest sollte man eigentlich alle informationen über den Punkt mit den Koordinaten x, y des Events bekommen.
Wenn ich aber nun in eine Zeile des Datagridviews klicke(Beispiel: Spalte 2,Zeile 3) müßte nun doch theoretisch als RowIndex der Index der Zeile angezeigt werden(also hier dann 2), als ColumnIndex sollte nun der Index der Spalte angezeigt werden(also hier dann 1) und der Typ müßte eigentlich anzeigen welchen Typ das Feld oder Control hat in das ich geklickt habe(also hier DataGridViewCell oder sowas).

wenn ich aber in bei mir in irgendeine Zeile klicke wird als Typ immer ColumnHeader angegeben(also als ob ich einen Header angeklickt hätte), als Rowindex wird immer -1 angegeben(also auch als ob ich einen Header angeklickt hätte) und als Columnindex wird entweder 3 oder 4 angegeben. Warum mal 3 oder mal 4 angezeigt wird habe ich noch nicht herausgefunden.

Aber ich habe das Problem jetzt eh weiträumig umgangen. Aber wenn es mir jemand trotzdem erklären könnte fände ich es nett.

hoffe es ist jetzt verständlich. 🙂
gruß

10.08.2005 - 15:16 Uhr

Moin,

ich versuche gerade meinem DataGridView Drag and Drop beizubringen. Leider ergeben sich ein paar unlogische Fehler. Hier erstmal der Code:

        
DataGridView.HitTestInfo hitInfo = SchedulerRoomTable.HitTest(e.X,e.Y);     
if (e.Button == MouseButtons.Left) {            
Console.WriteLine(hitInfo.Type);            
Console.WriteLine(hitInfo.RowIndex);            
Console.WriteLine(hitInfo.ColumnIndex);          
}

So nun zum Problem. Egal wo ich jetzt im Datagrid hinklicke ist der Typ = ColumnHeader, der Rowindex = -1 und der Columnindex ist entweder 3 oder 4 (dazu, die vierte Spalte ist die erste im Grid, welche visible ist)

Wäre froh, wenn mit jemand nen Tip geben könnte.
Gruß
lupus

29.06.2005 - 12:05 Uhr

moin,

ich versuche gerade Filme abzuspielen mit folgendem Beispiel:
http://www.mycsharp.de/wbb2/thread.php?threadid=6428

für den Film wird aber immer ein neues Fenster geöffnet. Kann man es hinbekommen, dass der Film in meiner Anwendung abgespielt wird. Also zum Beispiel in einem Container oder sowas?
Ich habe bei dem Player nirgend gefunden wo ein neues Fenster geöffnet wird oder wo steht wo der Film abgespielt wird. (wird wohl windows intern laufen)

Gruß,
Lupus

10.06.2005 - 14:29 Uhr

Vielen Dank!

Auf die Idee mit dem Prozess bin ich auch gekommen nur nicht auf die Function. 🙂

habe es mit process.responding und ner while schleife versucht(mein Programm in der schleife auf false gesetzt). Das hat aber nicht so ganz geklappt.

Gruß

10.06.2005 - 13:19 Uhr

Moin,

ich möchte eine Datei öffnen und anzeigen lassen. Ich mache es so:

System.Diagnostics.Process.Start("c:\test.doc");

wie kann ich es schaffen, dass mein eigenes Programm einfriert bis ich das andere Programm wieder geschlossen habe?(hier zum beispie word)

ist das überhaupt möglich?

vielen dank
gruß

26.04.2005 - 08:59 Uhr

Morgen,

Ich habe ein kleines Problem mir einem Datagrid. Ich habe schon überall gesucht aber leider noch keine Lösung gefunden.

Also... Ich habe ein Datagrid mit n Zeilen und eine Combobox, welche als Suchfunktion funktioniert. Wenn man nun eine Tabelle in der Suchfunktion auswählt soll im Datagrid genau die Zeile angezeigt werden in welcher der Sucheintrag steht.

Bisher habe ich es auch hinbekommen, dass die gewünschte Zeile selektiert wird:


daten_tabellen.Rows[0].Selected = false;
daten_tabellen.Rows[i % rowsShown].Selected = true;

Mein Problem ist, dass die Zeilen aber nicht automatisch auch angezeigt werden.
Das Fenster bleibt automatisch bei den ersten paar Zeilen des Datagrid zentriert.

Wie kann man einstellen, dass eine nicht sichtbare Zeile angezeigt wird. Ich habe bisher nur geschafft mir anzeigen zu lassen, ob sie angezeigt wird oder nicht(displayed). Aber nicht wie ich sie anzeigen kann.

MFG
Lupus

21.04.2005 - 11:24 Uhr

Moin,

ich es es mal mit der Datasource probiert. Ich habe alle Daten in eine Datatable geschrieben und diese dann als Datasource angegeben.

leider wird es ddurch nicht schneller.

gruß wolf

20.04.2005 - 12:02 Uhr

Hallo,

danke für die schnelle Antwort.

Das mit dem suspendlayout() habe ich leider schon ausprobiert. Hat nichts an Geschwindigkeit gebracht.

Hat wer ne Idee wie man das Datagrid noch befüllen kann?

Wolf

20.04.2005 - 11:32 Uhr

Hallo,

ich habe ein Problem beim befüllen meines Datagrids. Zunächst einmal ein kleiner Code ausschnitt:

new public void RefreshContent()
{
for (int i = 0; i < ((SchemaDocumentationDoc)mDocument).CountTabelleOben; i++)
{
daten_tabellen.Rows.Add(i + 1,
((SchemaDocumentationDoc)mDocument).TableObenName_,
((SchemaDocumentationDoc)mDocument).TableObenOwner_,
((SchemaDocumentationDoc)mDocument).TableObenTablespace_,
((SchemaDocumentationDoc)mDocument).GetCode(((SchemaDocumentationDoc)mDocument).TableObenGruppe_),
((SchemaDocumentationDoc)mDocument).TableObenPK_Name_,
((SchemaDocumentationDoc)mDocument).TableObenSchlagwort_,
((SchemaDocumentationDoc)mDocument).TableObenKommentar_);

  }  

}

In den Arrays sind jeweils Daten aus eine Datenbank gespeichert. Nun zu meinem Problem:
Um so mehr Daten ich in den Array´s habe umso langsamer werden die Daten in das Datagrid geschrieben. Ich habe aber bis zu 1000 Datensätze und es ist unerträglich wie lange das füllen Des Datagrids dauert.

Gibt es eine andere Möglichkeit? Geht es mit AddRange besser? Wenn ja wie?
Meine versuche mit AddRange sind gescheitert.

vielen Dank,
Gruß Wolf