Zum Inhalt springen

[C++/CLI] einzelne Zellen im DataGridView


Kati82

Empfohlene Beiträge

Hi @all:

Wie der Titel schon sagt, möchte ich einzelne Zellen im DataGridView mit Werten befüllen. Welche Eigenschaft muss ich da nutzen. Etwa dieses Items? Ich weiß nicht genau, wonach ich suchen soll.

Hintergrund ist der, dass ich in zuerst zeilenweise 3 von 5 Spalten der Tabelle mit Daten befüllen und danach erst die anderen Spalten mit Werten versehen möchte.

Kann mir jemand einen Tipp geben?

Vielen Dank im voraus und viele Grüße

Kati82

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

ich hätte da mal noch ne Frage. Ich habe mir jetzt einen Thread erstellt, der meine GUI zyklisch aktualisiert. Bei Labels etc. funktioniert das auch ganz gut. Nur bei der Datagridview weiß ich nicht, wie ich das anstellen soll.

Ich habe mir das ganze so vorgestellt, dass ich in einer anderen Klasse Listen mit Daten befülle. Diese Listen stellen dann die einzelnen Spalten der DatagridView dar. Das Problem ist nämlich, dass ich die View zum Teil nur zellenweise befüllen kann. Wie kriege ich aber nun heraus, wie weit ich eine Spalte der View bereits gefüllt habe? Hoffentlich habt ihr mein Problem verstanden.

Gibts eventuell noch nen einfacheren Lösungsansatz?

Danke schon mal im voraus.

Viele Grüße

Kati82

Link zu diesem Kommentar
Auf anderen Seiten teilen

die frage ist, ob das ständige aktualisieren überhaupt sinn macht.

wenn ein user gerade daten bearbeitet, freut es ihn vermutlich nicht, dass seine änderungen verworfen werden.

wieso refresht du das DGV nicht vollständig neu?

die repräsentieren daten, die du vermutlich in einer DataTable (?) haben wirst, lassen sich so sicherlich auch einfacher vorhalten.

s'Amstel

Link zu diesem Kommentar
Auf anderen Seiten teilen

Nee, den Anwender wirds nicht stören, der darf nämlich nix reinschreiben.

Hintergrund ist der, das ich mit meinem Programm mit einem anderen Gerät kommuniziere. Vorerst ist es erstmal ein einfacher Ping. IM DGV sollen dann die Antwortzeiten je nach Paketgröße augelistet werden. Und wenn man nun mal ein paar 100 Pings schickt und ich erst zum Schluss das DGV refreshe, weiß ich nicht, ob das so günstig ist für den Anwender.

Die Daten trage ich übrigens nicht in eine DataTable ein. Wäre das in meinem Fall ratsam?

Gibts eventuell noch ne bessere Möglichkeit, die Ergebnisse darzustellen?

Kati82

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich möchte mein GUI oder vielmehr mein DGV regelmäßg refreshen (so alle 2, 3 Sekunden), weil ich möchte, dass der Anwender immer mal ein paar aktuelle Daten vor Augen hat. Ich habe jetzt im Grunde 2 Klassen, ein für die Oberfläche und eine wo der ganze Sende-/ Empfangkram drin ist. Ich hab mir das jetzt so vorgestellt, dass ich die Daten, die ich in der zweiten Klasse alle bekomme, in eine Liste oder ähnliches reinschmeiße.

Von dem Thread aus, von dem aus ich refreshe, rufe ich dann diese Listen ab.

Ich glaub, die Herangehensweise ist überhaupt nicht optimalt. Liegt wohl daran, dass ich wenig mit DGV und so komplexen Datensätzen arbeite.

Ich hoffe ich, ich hab es jetzt verständlicher ausdrücken können. Wenn nicht, bitte entschuldigt, es ist Freitag.

Kati82

Link zu diesem Kommentar
Auf anderen Seiten teilen

Erst einmal noch ein Dankeschön für eure Unterstützung.

Ich hab mir die Spalten der Tabelle in etwa so vorgestellt (ob ich die Ziel-IP mit reinnehme, weiß ich noch nicht, die ist ja eh immer gleich).

Lfd. Nr.;Ziel-IP;Antwortzeit (100 Bytes);Antwortzeit (1000 Bytes);Antwortzeit (10000 Bytes)

Ich soll nämlich einen bereits vorgefertigten Test machen, wo zunächst eine bestimmte Anzahl an Pings mit 100 Bytes, danach mit 1000 Bytes, und zum Schluss mit 10000 Bytes Paketgröße gesendet wird. Das würde also bedeuten, dass sich zuerst (mal abgesehen von den ersten beiden Spalten) die 3. Spalte füllt, dann die 4. und zum Schluß die 5.

Falls jemand nen Vorschlag hat, wie ich es besser machen könnte, ich bin für alles offen.

@Guybrush: Also ist das so richtig wie ich das mit der Datenquelle angegeben habe?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Und wie füge ich einzelne Daten in eine DataTable ein? Will heißen, wir befülle ich genau eine Zelle der DataTable? Oder geht das nur beim DataSet? Mit nem normalen Index kann man ja da nicht arbeiten, oder? Google und MSDN haben mir bis jetzt noch nichts hilftreiches gezeigt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wenn man nur die eine Tabelle hat dann reicht auch die DataTable aus, das DataSet braucht man nur wenns mehrere Tabellen sind die da dran gebunden werden sollen.

war mir neu, danke :)

Google und MSDN haben mir bis jetzt noch nichts hilftreiches gezeigt.

da stehts ganz schon mit beispiel beschrieben:

DataTable-Klasse (System.Data)

s'Amstel

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ok, also ich habe jetzt folgendes:

DataTable^ dtResults = gcnew DataTable();

DataColumn^ ColNr = gcnew DataColumn();

DataColumn^ ColIP = gcnew DataColumn();

DataColumn^ ColResp1 = gcnew DataColumn();

DataColumn^ ColResp2 = gcnew DataColumn();

DataColumn^ ColResp3 = gcnew DataColumn();


dtResults->Columns->Add(ColNr);

dtResults->Columns->Add(ColIP);

dtResults->Columns->Add(ColResp1);

dtResults->Columns->Add(ColResp1);

dtResults->Columns->Add(ColResp1);
In der Methode, wo ich nach und nach die DataTable füllen möchte, habe ich noch das (zum Test mal nur eine Spalte füllen):
DataRow^ row;


for (int i = 0; i < 10; i++)

{

	row = dtResults->NewRow();

	dtResults->Rows->Add(row);

	dtResults->Rows[i][0] = Convert::ToString(i) + ". String";

}

Die Datatable habe ich als Datenquelle für das dgv angegeben. In dem Thread, wo ich das dgv updaten möchte, habe ich einfach nur ein Refresh() für das dgv eingefügt.

Das scheint aber nur teilweise zu funktionieren. Das Problem ist, dass nur die erste Zeile im dgv angezeigt und der Rest komplett unterschlagen wird. Und ich bin bisher noch nicht dahinter gestiegen, warum das so ist. Ich vermute, es liegt an der DataTable.

Leider kann ich dem dgv nicht die Zeilen selber hinzufügen, z.B. wenn das Form lädt. Es kommt dann immer die Exception, dass Zeilen erst dann hinzugefügt werden können, wenn es auch Spalten gibt. Da die Spalten aber von der DataTable abhängig sind, weiß ich momentan nicht, wie ich den Fehler umgehen kann.

Ich hoffe, ich finde den Fehler noch heraus.

Viele Grüße

Kati82

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also das funktioniert bei mir ohne Probleme:

DataTable dt = new DataTable();


public Form1()
{
InitializeComponent();
dt.Columns.Add(new DataColumn("col1",typeof(string)));
dt.Columns.Add(new DataColumn("col2",typeof(string)));
dataGridView1.DataSource = dt;

}

private void button1_Click(object sender, EventArgs e)
{
DataRow row;
for (int i = 0; i < 10; ++i)
{
row = dt.NewRow();
dt.Rows.Add(row);
row[0] = i.ToString();
row[1] = i.ToString("000");
}
}[/PHP]

Auf der Form befinden sich ein DataGridView und ein Button

Link zu diesem Kommentar
Auf anderen Seiten teilen

So ähnlich hatte ich es ja auch. Es ging wohl deswegen nicht, weil ich mit unterschiedlichen Klassen gearbeitet habe. Und jetzt nachdem ich das etwas umstrukturiert habe, läuft es.

Ich hatte gehofft, dass das Problem geklärt ist. Aber wenn man das eine Problem gelöst hat, taucht dafür ein Anderes wieder auf. Ich habe jetzt das Problem, dass keine Scrollbars angezeigt werden. Das ist ungünstig, wenn die Liste mal etwas länger wird. Gabs da nicht mal eine Eigenschaft, wo man sagen konnte, dass die Scrollbars immer angezeigt werden sollen? Wie hieß die nochmal?

Oder muss ich mir jetzt selber einen Scollbar basteln?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich hab noch was festgestellt. Bei meiner DataGridView habe ich die Anchor-Eigenschaft etwas verändert. Wenn ich jetzt das Programm laufen lasse und das und ich die Fenstergröße verändere nachdem die Liste gefüllt ist, dann erscheinen auf einmal die Scrollbalken. Was passiert also beim Ändern der Fenstergröße? Das kann doch auch nichts anderes sein als eine Art Refresh. Wenn ich das rauskriegen könnte, dann wäre mir schon geholfen.

Habt ihr ne Idee?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...