Autor Beitrag
l00P
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Mi 11.06.08 11:34 
Hallo Leute,

Ich habe folgendes Problem als c# Anfänger:

Ich möchte ein mehrdimensionales Array in einem dataGrid abbilden.
ein eindimensionales ist kein Problem. Ich binde einfach das array mit dataGrid1.DataSource an das Grid. Aber wie ist das mit mehrdimensionalen arrays???

mein Array:

string[,] allProducts = new string[346817,3];


PS: Ich lese meine Daten aus einer Textdatei...


danke schonmal für eure Hilfe!!

glg
michlG
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Mo 16.06.08 14:25 
Hallo,

ich würde die Daten in eine DataTable zwischenspeichern, denn das ist einfacher und schöner als ein mehrdimensionales Array.
Weiters ist es einfacher den DataGridView anstatt dem DataGrid zu verwenden. Denn der DataGrid ist mittlerweile standardmäßig aus der Toolbox raus und wurde vom DataGridView ersetzt.

Anschliessend kannst du die DataTable einfach an den DataGridView binden.

mfg
michlG
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mo 16.06.08 17:44 
l00P Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Mi 18.06.08 14:35 
Danke erstmal für eure Antworten.

Leider komm ich ums Verrecken nicht drauf wie ich mein 3dimensionales String Array in eine DataTable bekomme!!!!

Kann mir da vielleicht jemand mit einem Beispielcode aushelfen??

danke schinmal,

lg
wolf
michlG
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Mi 18.06.08 15:33 
Hallo

3dimensionales String Array

bei einem 3dimensionalen String-Array wird das natürlich viel schwieriger, denn wie willst du so einen Array in einem DataGridView anzeigen.
Denn dieser hat ja auch nur zwei Dimensionen (oder hast du schon mal einen 3d DataGridView gesehen).
Deshalb musst du dir da etwas anderes Überlegen.

Vielleich könntest du einfach zwei dimensionen in den DataGridView anzeigen und die dritte (passend zur gewählen Zeile im DataGridView) in einen weiteren DataGridView anzeigen. Aber das ist kompliziert und sieht auch nicht sehr schön aus.
Deshalb musst du da wohl dein gesamtes Konzept überdenken, denn einen dreidimensionalen Array im DGV anzeigen, das geht schlecht

mfg
michael
Flitzs
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 123
Erhaltene Danke: 7

Win7 x64/86 WinServer 2008 R2 x64
C#/C++/C VS2010
BeitragVerfasst: Mi 18.06.08 18:11 
Titel: Liste statt Array
Du könntest zum Beispiel die Daten statt in einem Array, in einer Liste speichern.
Das könnte dann in etwa so aussehen (ohne Fehlerbehandlung):

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
   public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)

            var RohDaten = new List<DatenItem>();            
            var SR = new System.IO.StreamReader("test.txt");
            while (!SR.EndOfStream)
                RohDaten.Add(new DatenItem() { I1 = SR.ReadLine(), I2 = SR.ReadLine(), I3 = SR.ReadLine() });
            
            //Mit fitlerung             
            var FilteredDaten = new List<DatenItem>();
            FilteredDaten.AddRange(from d in RohDaten
                                   where d.I1.StartsWith("A")//Filterungen
                                   select d);
            dgv1.DataSource = FilteredDaten;
            
            //Ohne Filterung
           // dgv1.DataSource = RohDaten;              



        }
    }
    public class DatenItem
    {
        public String I1 { get; set; }
        public String I2 { get; set; }
        public String I3 { get; set; }       
    }


mfg Flitzs
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mi 18.06.08 19:53 
user profile iconFlitzs hat folgendes geschrieben:
Du könntest zum Beispiel die Daten statt in einem Array, in einer Liste speichern.

:welcome: !
Ich will dir bei deinem ersten Beitrag nicht gleich den Knüppel zwischen die Beine werfen ;) , aber wie würdest du ein dreidimensionales Array auf eine Liste abbilden?
michlG hat es auf den Punkt gebracht: Wie diese Projektion 3D -> 2D vonstatten gehen soll, kann uns nur l00P selbst erklären. Da gibt es grundsätzliche dutzende Varianten.
l00P Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Mi 18.06.08 20:33 
Uuuh vielleicht ein Erklärungsfehler.

Also ich kann meine daten schon in einem dataview anzeigen. Das ganze soll in etwar so aussehen:

Nr name häufigkeit
~~ ~~~~ ~~~~~~~~~~

1 willi 3
2 susi 1
3 franz 9

usw....

Häufigkeit bedeutet in dem Fall wie oft kommt der name in meiner textdatei vor die ich einlese...

Das wäre hier mein Array: string[,] allProducts = new string[1000,3]; //soll also 1000 Zeilen einlesen und hat eben die 3 Cols: Nr. name, häufigkeit.

Hoffe ich habe keine Verwirrung gestiftet. :)

Gibt es also für dieses Problem eine bessere Lösung?

danke schonmal

PS: ich steh wirklich schon an und seh den Wald vor lauter Bäumen nicht mehr!!!
michlG
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Mi 18.06.08 20:41 
Hallo,

Das
ausblenden C#-Quelltext
1:
string[,] allProducts = new string[1000,3];					

ist ein zweidimensionaler Array.
Und so einer kann natürlich in einen DataGridView angezeigt werden.
Entweder machst du das wie von Khabarakh beschrieben, oder du nimmst du Variante mit der DataTable.

Der DataTable muss du als erstes die einzelnen Spalten hinzufügen (3 Stück).
Anschliessend kannst du jede Zeile der Reihe nach in die DataTable schreiben.

SO:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
DataTable mytable = new DataTable();
mytable.Columns.Add("Spalte1");
mytable.Columns.Add("Spalte2");
mytable.Columns.Add("Spalte3");

mytable.Rows.Add(new object[]{"Wert von Spalte 1","Wert von Spalte 2","Wert von Spalte 3"});


Syntaxfehler sind vielleicht ein paar drinnen, weil ich das nur so schnell gecoded habe, aber vom Prinzip aus geht das so

mfg
michael

Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt
l00P Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Mi 18.06.08 21:47 
ok, danke Michael!

so werd ich es probieren, allerdings weiß ich noch nicht wie ich die Rows in einem loop hinzufüge?!?

Du schreibst ja: mytable.Rows.Add(new object[]{"Wert von Spalte 1","Wert von Spalte 2","Wert von Spalte 3"});
wenn ich aber sowas wie mytable.Rows.Add(new object[]allProjects[i,0]); schreibe dann geht das nicht.

Weißt du was ich meine?

glg
michlG
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Mi 18.06.08 22:10 
Hallo,

user profile iconl00P hat folgendes geschrieben:

Weißt du was ich meine?


Ja ungefähr habe ich dich verstanden.
D.h. du willst jetzt die Daten vom Array in die DataTable schreiben.
Am einfachsten wäre es, wenn du die Daten direkt aus der Textdatei in die DataTable schreibst.
Dazu kannst du die Datei einfach zeilenweise auslesen und die Daten mit dem von mir geposteten Befehl reinschreiben.

Wenn es jetzt darum geht die Daten vom Array in die DataTable zu kriegen, dann kannst du das so machen.
ausblenden C#-Quelltext
1:
2:
3:
4:
for(int i = 0;i<allProjects.GetLength(0);i++) //Bin nicht sicher, ob der Befehl wirklich GetLength (bei mehreren Dimensionen) heisst
{
   mytable.Rows.Add(new object[]{allProjects[i,0],allProjects[i,1],allProjects[i,2]});
}


Das ist jetzt zwar nicht die schönste Lösung, aber diese ist am einfachsten zu verstehen

mfg
michael

Moderiert von user profile iconChristian S.: C#-Tags hinzugefügt