Einzelnen Beitrag anzeigen

Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#3

Re: DataGridView füllen zur Laufzeit

  Alt 11. Aug 2008, 10:58
Zitat von GuenterS:
Anscheinend muss man, wenn man auf die Unterstützung vom Studio nicht bauen kann, die Spalten manuell einfügen und auch das Feld für die Datenbindung ausfüllen.
Neeee!
Einfach irgendwo die Eigenschaft AutogenerateColumns auf true setzen.
Die ist dafür da, damit deine Design-Time Einstellungen nicht immer überschrieben werden.
Ohne Designtime macht das natürlich wenig Sinn.


Zitat:
Warum der Verbindungsaufbau aber dermaßen langsam ist, ist mir nach wie vor ein Rätsel. Ich hab die sekunden mal gezählt und komme auf 15-20 ... irgendwie nicht gerade flott.
Dein Connectionstring sieht aus als hättest du in deinem Orahome\Network\Admin keine TNSNames.ora mit den Einstellungen für deine DB hinterlegt.
Eine IP anzugeben heißt, dass er durch etliche Mögliche Settings fällt bevor er es irgendwann versucht auf die Default DB der Maschine zuzugreifen.

Eine Möglichkeit ohne TNSNames.ora siehst du in dem abstrakten Bleistift unten.
Da siehst du außerdem wie du eine Conenction kriegen kannst ohne gegen einen speziellen Provider zu kompilieren. Und wie du wo "using" nutzen kannst damit du a) nicht in Finalizer rennst und b) keine Conenction unnötig lange aufgehalten wird.
Und c) ein kleiner Tip, damit der GridView nicht so EXTREEEEM langsaaaaam ist (DoubleDBuffered ist in .Net leider protected )

Das da unten geht schneller auf als ein Maikäfer husten kann. Du kannt auch den ODP von Oracle installieren.
Der öffnet Connection signifikant schneller als die Krücke von MSFT, dafür musst du dann deine App.config anpassen um ihn nutzen zu können.


(KEIN Delphi code)
Delphi-Quellcode:
type
  DoubleBufferedDataGridView = class(DataGridView)
   protected
      method CreateHandle; override;
   end;

method DoubleBufferedDataGridView.CreateHandle;
begin
   DoubleBuffered := true;
   inherited;
end;

class method ConsoleApp.Main;
begin
   var dt := new DataTable();
   var factory := DbProviderFactories.GetFactory("System.Data.OracleClient");
   using conn := factory.CreateConnection() do
   begin
      conn.ConnectionString := "Persist Security Info=True;User ID=deinUser;Password=deinPasswort;"+
                               "Data source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)"+
                               "(HOST=localhost)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=DeineDB)))";
      conn.Open();

      using cmd := conn.CreateCommand() do
      begin
         cmd.CommandText := "select * from all_users";
         using rdr := cmd.ExecuteReader() do
            dt.Load(rdr);
      end;
   end;

   Application.EnableVisualStyles();

   using frm := new Form() do
   begin
      var dgv := new DoubleBufferedDataGridView();
      dgv.Dock := DockStyle.Fill;
      dgv.AutoSizeColumnsMode := DataGridViewAutoSizeColumnsMode.AllCells;
      dgv.AutoGenerateColumns := true;
      dgv.DataSource := dt;
      frm.Controls.Add(dgv);
      frm.ShowDialog();
   end;
end;
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat