DataGridView befüllen



  • Tja, was mag Dir diese Meldung wohl sagen?

    Du hast wahrscheinlich noch gar keine "Row" in deinem Grid! Bevor du also darauf
    zugreifen kannst, solltest du dataGridView1->Rows->Add() aufrufen.

    Schau Dir doch mal die MSDN an. Da findest du die Grundlagen...

    Viel Erfolg,

    Dappeljuh



  • Hallo

    Doch es sind Rows vorhanden. Aber er findet das DataGridView im Form2 nicht.

    Gruß



  • Poste mal deinen Code.



  • Hallo

    Hier der Code für das Formular mit dem DataGridView.

    private: System::Void Form2_Load(System::Object^  sender, System::EventArgs^  e) {
    
    			for (i = 0; i <= 3; i++)
    			{
    				Daten->ReadOnly = true;
    				Daten->Font = gcnew System::Drawing::Font("MS Sans Serif",11);
                    Daten->Columns[i]->Width = 50;
    			}
    
    			for (r = 0; r <= 10; r++)
    			{				
    				Daten->Rows->Add();
    				Daten->Font = gcnew System::Drawing::Font("MS Sans Serif",11);
    	            Daten->Rows[r]->Height = 27;
    			}
    		}
    

    Und hier der Code für das MDI Formular wo ich die Daten einlesen will.

    private: System::Void mnu_Open_Click(System::Object^  sender, System::EventArgs^  e) {
    			 String^ Inhalt;
    			 OpenFileDialog^ dlg = gcnew OpenFileDialog();
    			 dlg->Filter = "BFile-Dateien (b.*)|b.*";
    
    			 dlg->AddExtension = true;
    			 dlg->DefaultExt = "tbd";
    
    			 if (System::Windows::Forms::DialogResult::OK == dlg->ShowDialog())
    			 {
    				 try
    				 {
    					IO::StreamReader^ rdr = gcnew IO::StreamReader(dlg->OpenFile(),System::Text::Encoding::UTF7);
    					Inhalt = rdr -> ReadToEnd(); 
    					rdr->Close();
    				 }
    				 catch (Exception^ ex)
    				 {
    					 MessageBox::Show("Datei konnte nicht gelesen werden");
    				 }
    
    				 DataGridView^ Daten = gcnew DataGridView();
                     Daten->Rows[0]->Cells[0]->Value = Inhalt;
    
    			 }
    		 }
    

    Vielen Dank für deine Hilfe.

    Gruß



  • Hi,

    zunächst einmal solltest du das Layout des dataGridViews mit dem Designer festlegen. Das spart Zeit und eventuelle Fehler...

    DataGridView^ Daten = gcnew DataGridView(); 
    Daten->Rows[0]->Cells[0]->Value = Inhalt;
    

    Hast du jetzt in 2 unterschiedlichen Forms jeweils ein dataGridView? Oder wie verstehe ich das? 😕
    Dann müsstest du mit Eigenschaften(properties) arbeiten um die Daten von einer Form zur anderen zu transportieren...



  • Hallo

    Ich möchte über ein Menü in Formular1 eine Datei öffnen und die Daten in das DataGridView in Formular2 eintragen.

    Gruß



  • Und das passiert hier:

    DataGridView^ Daten = gcnew DataGridView(); 
    Daten->Rows[0]->Cells[0]->Value = Inhalt;
    

    Richtig?

    Gilt denn das Form2LoadEvent für dieses dataGridView?
    Ich vermute mal nicht, oder? Dann müsstest du in Form2 ein Property zum Setzen der Werte integrieren...

    Bist du den Code schon mit dem Debugger durchgegangen?



  • Hallo

    Ja das Form2LoadEvent gilt für das dataGridView.

    Wie müßte der Code für das Setzen der Werte lauten?

    Gruß



  • Schau mal in der Faq nach property...

    Tritt die Exception denn an der Stelle

    Daten->Rows[0]->Cells[0]->Value = Inhalt;
    

    auf? Das kannst du mit dem Debugger feststellen...

    Falls ja, lass dir mal die Anzahl der Rows und Cells per MessageBox zurückgeben. Ich vermute immer noch das da gar keine Row drin ist...

    PS Überprüfe mal den Wert von Inhalt. Vielleicht gibt der Reader ja nen nullptr zurück... Kannst ja mal spasseshalber nen anderen Wert übergeben. Z.B. "Test"...



  • Hallo

    Ja die Exception tritt genau an der Stelle auf.

    Es sind Rows enthalten. Wenn ich zum testen den Befehl "Daten->Rows[0]->Cells[0]->Value = "test";" im Form2 (wo sich das DataGridView befindet) ausführe steht auch "test" im Grid drin. Auch mit dem Befehl "int Test = Daten->RowCount;" liest er mir die Anzahl der Rows aus.

    Aber ich möchte ja aus Form1 auf das DataFridView in Form2 zugreifen. 😉

    Gruß



  • Also soll es ein property sein... 😉

    public:
       property dataGridViewRow^ Row
       {
          String^ get()
          {
             return dataGridView1->Rows[0];
          }
          void set(dataGridViewRow^ argRow)
          {
             dataGridView1->Rows[0] = argRow;
          }
       }
    

    So, oder so ähnlich sollte es klappen. Ob´s ne row oder nen Array oder sonst was ist, musst du selbst entscheiden...

    PS Habs nicht comlipiert... eventuelle Syntax Fehler 😉


Anmelden zum Antworten