einfach tabelle darstellen



  • danke, ich dachte da müsse eine datenquelle angegeben werden, hatte deswegen es gar nicht ausprobiert. Aber es scheint genau das richtige zu sein. Nun muss ich noch schauen, wie ich ausm Code selber ein bestimmte anzahl (vom user eingegeben) von Spalten anlegen kann und auch deren postition ermitteln kann.

    Bei hilfe melde ich mich nochmal.
    Achja und listboxen,checkboxen etc. kann ich auf in die zellen stecken oder ?



  • nochwas:

    System::Windows::Forms::DataGridViewTextBoxColumn^  Column1;
    

    die habe ich vom codegenerator erzeugen lassen. Nun will ich ja selber nach bedarf welche erstellen lassen. Muss ich die auch aufm heap anlegen, oder darf ich die auch aufm stack anlegen.

    Und

    this->dataGridView1->Columns->AddRange(gcnew cli::array< System::Windows::Forms::DataGridViewColumn^  >(2) {this->Column1, 
    				this->Column2});
    

    wieso ist das so lang, wenn ich einfach neue dranhängen will, geht nicht ein einfach dataGridView1->Columns->Add(col3);



  • sorry,

    wie ist das bei cli, werden da referenzen wie in java gespeichert oder kann ich davon ausgehen dass bei einem zB add(col3) kopiert wird.

    bin nur standard c++ bewandert und da tauchen natürlich ein paar fragen auf 🙂



  • hat sich erledigt, nen normales add gibts auch und da werden ^-gespeichert, also muss new bzw gcnew her 😉

    ^ ist da pendant zu *-Zeiger oder ? Was hat das für Vorteile, automatische speicherbereinigung ?

    weil habe ja die mit gcnew angelegten objekte mit add in den container getan, also sorgt dieser auch wieder für die speicherfreigabe ?



  • Schau Dir die Signatur an. Wenn es T^ ist, wird halt der Zeiger kopiert, wie im guten alten c++.

    this->dataGridView1->Columns->AddRange(gcnew cli::array< System::Windows::Forms::DataGridViewColumn^  >(2) {this->Column1, 
                    this->Column2});
    

    Ist so lange weil es effizienter ist und zum Zeiptunkt des Generierens alle Elemente bekannt sind.

    Btw.: Du färht besser wenn Du das GDV mit einem Dataset (und DataView) verwendest. Du kannst die Zellen etc. im Datasetz hinzufügen und verwalten. Weniger gefriemel, weniger Probleme, mehr Erstaufwand beim Lernen. (Aber das bist ja bei c++ gewohnt 🤡



  • Was willst du denn machen? Wenn du lediglich einzelne Zeilen anhängen willst, kannst du add() nutzen, willst du gleich nen ganzen Haufen fertiger Columns auf einmal einfügen, nutzt du addRange.

    PS
    Du brauchst natürlich nicht immer den vollqualifizierten Namen angeben. Aber ich denke das weisst du auch selbst. 😉

    PPS Willst du Columns oder Rows einfügen? Die Columns stehen ja meist schon von Anfang an fest...

    Die List und Checkboxen, weiss ich so nicht. Ich glaub das kannste im Designer bzw über die Cell Eigenschaft festlegen...



  • also momentan ist DataGridView genau das passende.
    Die Column stehen nicht von anfang an fest bzw nicht vor dem kompilieren, der user gibt an welche spalten er haben will und wieviel zeilen.

    Diese lange zeile ist mir nun ja auch klar, werde ich genauso machen, wenn der user die spalten eingegebn hat.

    nun muss ich nur wissen, welche spalte an welcher position ist, da das nachher in ne xml kommt und der user ja die position der Cols verschieben kann. Denke mal dazu lässt sich was finden und zu den list/check schaue ich mal.

    Danke bis hierhin, ich melde mich bestimmt gleich wieder.

    p.s.: arbeite schon lange mit c++ nur heute neu im gebiet von VS und CLI, da muss man sich erstmal die Konzepte anschauen und verstehen, danach kann ich richtig loslegen, momentan spiele ich ja noch mit den komponenten.

    p.s.s: hat das dinge nen eigenen gc, also kann ich sicher sein, das der meine geaddeten cols auch wieder freigibt ?



  • ein paar fragen zur entwicklungsumgebung.

    Immer wenn ne neue funkton zb ButtonClick dazu kommt steht im code ein private: davon, kann man das abstellen, also das das nur einmal da steht.

    bei eingebe eines bustabens will ich die membervariablen sehen, anstatt diese immer komplett einzugeben.

    finde für diese zwei keine optionen.



  • was habe ich bei cli für möglichkeiten einen int in nen string umzuwandeln.
    zb bei indexof() muss ich das dann in nen stringstream stecken ( bzw. lexical_cast ) oder gibt es eigene klassen dafür ...

    hoffentlich nerve ich net.



  • C++/CLI und WIndowsforms ist ggenerell keine gute Idee, der Frmdesigner ist alles andere als gut - spätestens bei größeren Projekten eckt man ständig an.

    Das private an jeder zeile kannst Du nicht abstellen. Das ist aber auch eines der kleinesten Probleme ;o)

    Zu den Membern:

    http://www.wholetomato.com/

    Zu dem int:

    T.ToString() geht generell bei C++/CLI. Alles ist von Object abgeleitet. Du kannst also mal schauen was Object alles kann.



  • Knuddlbaer schrieb:

    C++/CLI und WIndowsforms ist ggenerell keine gute Idee, der Frmdesigner ist alles andere als gut - spätestens bei größeren Projekten eckt man ständig an.

    Gibts andere Sachen, die da gegen sprechen, ich könnte ja auch noch auf C# umsteigen...



  • int a = 4;
    std::string t = a.ToString()->c_str();
    label1->Text  = t.c_str();
    

    ?
    ToString hat keine c_str() ist doch voll sinnlos ?
    label1->Text ist ein String^ , wieso nicht ganz normal String und wie krieg ich std::string da rein ?



  • naja bin erstmals auf String^ umgestiegen.

    String^ a = gcnew String("");
    int count = dataGridView1->ColumnCount;
    
    for (int i=0;i<count;++i)
    	a += "Nr. " + (i+1).ToString() + " " + dataGridView1->Columns[i]->HeaderText + " -- ";
    
    label1->Text = a;
    a = "";
    

    Wenn ich die Anordnung der Spalten ändere, hat das keine Auswirkung auf die interne Datenstruktur. Gibt es eine andere möglichkeit, immer aktuelle Position einer Spalte zu ermitteln?

    Ansonsten müsste der User von Anfang an, die Position wählen und ich die Tabelle dementsprechend erzeugen. Wäre aber nciht so schon, wie wenn der User die per drag&drop verschieben könnte ...

    Ne Idee ?



  • Vermeide das mischen von Unmanaged und Managed code. Soll heissen:
    Irgendwo ein std::string in ein managed Objekt zu stecken ist ein Designfehler und sollte überdacht werden. (Klar, speziell im Einsatz von C++/CLI wird man soetwas haben weil man ja C++/CLI wohl eher als Brücke zwischen Managed und Unmanaged verwendet. Such mal Beiträge von nn - er hat das mal schön erläutert.)

    Wenn ich die Anordnung der Spalten ändere, hat das keine Auswirkung auf die interne Datenstruktur
    

    Das ist auch gut so! Mit ein wenig überlegen fällt Dir der Grund selbst ein, spätestens wenn Du eine Datenbank an ein Grid gebunden hast.

    Die Position der Columns hat mich nie interessiert. Analyiere mal die DataGridViewColmnCollection - eventuell ändert sich diese ja in der passenden Reihenfolge.



  • Ok, bin eben so STL (jaja std::string gehöhrt nicht zu STL würde artchi sagen 🙂 ) gewöhnt, aber ok werde nix mixen.

    Stimmt wäre ja nicht gut, wenn sich was ändert, obwohl ich keine Datenbank anbindung habe, ganz zu schweigen vom verschieben etc der internen Daten bzw nur Zeiger umbiege 😉 naja weiß ja net wie das implementiert ist.

    Der grund dafür ist das die xml genau die abbildung der tabelle haben muss, da diese xml nachher woanders eingelesen und dargestellt werden soll, deswegen muss ich ja irgendwie wissen, wenn etwas verschoben wurde. Ich schaue mal in die collections.



  • dataGridView1->Columns[i]->DisplayIndex
    

    🙂
    Habe sie zwar nicht in ner geordneten Liste, aber das tuts auch



  • Soweit alles gut, fehlt nur noch das mit den list- und checkboxen in den zellen. Finde aber dazu in den eigenschaften nichts. Kann mir einer nochmal dazu was genaueres sagen ?



  • sry, meinte die ganze zeit eigentlich combo und checkbox.



  • Habs gefunden, ne ne, bin wohl zu ungeduldigt und sollte mal demnächst besser suchen 🙂



  • Knuddlbaer schrieb:

    C++/CLI und WIndowsforms ist ggenerell keine gute Idee, der Frmdesigner ist alles andere als gut - spätestens bei größeren Projekten eckt man ständig an.

    Ne noch schlechtere Idee iss aber MFC zu verwenden, zu wenig Möglichkeiten und vor allem: HILFE iss das Layout uralt. Wer seine Programme verkaufen will ... auch das Auge bedient mit. Ich weiß zwar das sämtliche Anfängerbücher auf MFC abfahren aber ich finde die Autoren gehn da nicht mit der Zeit.


Anmelden zum Antworten