Entwickler-Ecke

WinForms - Listview items hinzufügen


c#ler - Do 11.10.12 08:35
Titel: Listview items hinzufügen
ich habe diverse SQL Skripte in einem Ordner.
Die Dateien in dem Ordner lasse ich zählen und deren Namen werden in einen string array geschrieben.

C#-Quelltext
1:
2:
3:
string[] Files = Directory.GetFiles(@"D:\Test\SQLScripts""*.sql");
DirectoryInfo di = new DirectoryInfo(@"D:\Test\SQLScripts");
count = di.GetFiles().Length;


Die Namen dieser Skripte möchte ich nun items in einer Listview hinzufügen (1 Item/1Skript)

C#-Quelltext
1:
2:
3:
4:
ListViewItem item1 = new ListViewItem(Files[1]);
item1.SubItems.Add("SubItem1a");
item1.SubItems.Add("SubItem1b");
listView_sql.Items.AddRange(new ListViewItem[] { item1});


Die Items manuell (einzeln) hinzuzufügen geht.
Ich möchte aber, dass:
- das Programm beim Start den die Anzahl der Skripte und deren Namen ausliest
- das Programm für jedes Skript ein Listviewitem erstellt wird

weiß jemand, wie das funktionieren kann?


Th69 - Do 11.10.12 09:19

Hallo c#ler,

du hast aber schon mal etwas von Schleifen gehört, oder?

Deine Konstruktion AddRange(new ListViewItem[] ...) für genau ein Item ist aber auch etwas umständlich. Nimm dafür doch einfach Add(item) - und nun sollte auch klar sein, wie die Schleife aussehen muß...


c#ler - Do 11.10.12 10:54

user profile iconTh69 hat folgendes geschrieben Zum zitierten Posting springen:
Hallo c#ler,

du hast aber schon mal etwas von Schleifen gehört, oder?

Deine Konstruktion AddRange(new ListViewItem[] ...) für genau ein Item ist aber auch etwas umständlich. Nimm dafür doch einfach Add(item) - und nun sollte auch klar sein, wie die Schleife aussehen muß...


Fragen kann man auch netter beantworten ;)
Natürlich habe ich schon etwas von schleifen gehört.
Ich habe auch schon einen ersten Versuch mit einer While schleife unternommen, jedoch weiß ich nicht, wie ich jedes item aus dem Array einzeln übergebe..

edit:
Ich habe nun


C#-Quelltext
1:
2:
3:
4:
5:
6:
while (n < count_scripts)
{
ListViewItem item1 = new ListViewItem(Files[0]);
n++;
listView_sql.Items.Add(item1);
}


Ich habe 28 Skripte in dem Ordner...
d.h. er haut mir 28x das GLEICHE Listviewitem rein...
die Anzahl passt...
aber ich weiß nicht, wie ich ihm sage, dass für jeden schleifendurchlauf ein neues Listviewitem mit dem nächsten String aus dem Array erstellt werden soll.


edit:


Problem behoben...
War einfach n denkfehler:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
int n = 0;
int c = 0;
if (Directory.Exists(@"D:\Test"))
{
string[] Files = Directory.GetFiles(@"D:\Test\SQLScripts""*.sql");
DirectoryInfo di = new DirectoryInfo(@"D:\Test\SQLScripts");
count = di.GetFiles().Length;

while (n < count)
{
ListViewItem varitem = new ListViewItem(Files[c]);
varitem.Name = "item" + n;
n++;
c++;

listView_sql.Items.Add(varitem);
}
}


Ralf Jansen - Do 11.10.12 11:11


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
string[] Files = Directory.GetFiles(@"D:\Test\SQLScripts""*.sql");
foreach (var file in Files)
{
    ListViewItem item = listView1.Items.Add(file);
    item.SubItems.Add("blah");
    // ....
}



Edit : wenn du immer Files[0] hinzufügst ist n überflüssig. Und du musst dich nicht wundern das du auch immer nur das erste Element zu sehen bekommst ;)


c#ler - Do 11.10.12 11:13

user profile iconRalf Jansen hat folgendes geschrieben Zum zitierten Posting springen:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
string[] Files = Directory.GetFiles(@"D:\Test\SQLScripts""*.sql");
foreach (var file in Files)
{
    ListViewItem item = listView1.Items.Add(file);
    item.SubItems.Add("blah");
    // ....
}



Edit : wenn du immer Files[0] hinzufügst ist n überflüssig. Und du musst dich nicht wundern das du auch immer nur das erste Element zu sehen bekommst ;)


recht hast ;)