Ich kann aus dem Code nicht erkennen, was Du eigentlich vorhast, aber so wie er ist macht er keinen Sinn, da Du <i> wechselweise als Spalten- und Zeilen-Index benutzt.
Einmal übergibst Du <i> an InsertColumn(), welches lediglich neue Spalten definiert, aber keine Einträge erzeugt. Hier sollte <i> die Position der neuen Spalte angeben.
Dann übergibst Du <i> an diverse Set*Item*(), die dafür gedacht sind, bestehende Einträge zu aktualisieren. Hier sollte <i> der Index eines existierenden Eintrags sein. Um Einträge zu erzeugen, musst Du InsertItem() benutzen. Einträge erstrecken sich automatisch über alle existierenden Spalten.
Dein Code müsste also sinngemäß so aussehen, wenn Du keine Spalten verwendest:
Code: Alles auswählen
for i ...
InsertItem(i, "item text")
SetItemData(i, whatever)
Und wenn Du tatsächlich Spalten haben willst:
Code: Alles auswählen
InsertColumn(0, "spalte1 heading")
InsertColumn(1, "spalte2 heading")
InsertColumn(2, "spalte3 heading")
for i ...
InsertItem(i, "item text spalte1") // beim einfuegen wird nur der text der ersten spalte gesetzt
SetItemText(i, 1, "item text spalte2") // aktualisiert den text für spalte2
SetItemText(i, 2, "item text spalte3") // aktualisiert den text für spalte3
SetItemData(i, whatever)