gundelputz
Goto Top

CSV-Datei in PrimalForms einbinden

Hallo da draussen,
nach dem mein Chef meine ersten Versuche mit Powershell begutachtet hat sind ihm gleich ein paar neue Aufgaben für mich eingefallen.
Wir werden uns also mit sehr hoher Warscheinlichkeit die nähsten Wochen öffters lesen.
Aber erst ein mal würde ich gern wissen wie ich mir eine CSV-Datei grafisch anzeigen lassen kann. In PrimalForms giebt es die Forms DataGrid und DataGridView. Sind das die richtigen Componenten für die Darstellung oder liege ich hier falsch. Wenn ja wird ich gern wissen wie ich die Daten an die Forms binden kann. Wenn nein was muss ich tun.

Content-Key: 207760

Url: https://administrator.de/contentid/207760

Printed on: May 7, 2024 at 17:05 o'clock

Member: Endoro
Endoro Jun 10, 2013 at 11:09:28 (UTC)
Goto Top
Hallo Gundelputz,

meinst du nicht dein Chėffė sollte einen Programmierer bezahlen?

Gruss!
Member: Gundelputz
Gundelputz Jun 10, 2013 at 11:12:28 (UTC)
Goto Top
Nö sonts fällt ihm noch was anderes ein wie er mir den Tag "verschönern" kann.
Member: Gundelputz
Gundelputz Jun 10, 2013 at 12:23:33 (UTC)
Goto Top
hab jetzt einen kleinen Teilerfolg erziehlt.

$array_csv = new-object System.Collections.ArrayList #array bereit stellen

$data_csv =@(Import-CSV "c:\ps_proj\proj_1\a4w.csv"| write-output) #csv einlesen und vorbereiten
$array_csv.AddRange($data_csv) #array mit daten aus csv füllen

$dataGridView1.DataSource = $array_csv #übergabe der Daten an datagridview

Es werden mir jetzt die Daten angezeigt aber nicht so wie ich es möchte.
Es giebt nur eine Spalte in der dann der gesamte Datensatz enthalten ist. Wahrscheinlich ist das DataGridView falsch konfiguriert.
kann mir da jemand Helfen.
Member: Gundelputz
Gundelputz Jun 10, 2013 at 12:52:02 (UTC)
Goto Top
habs auch mal so probiert

$array_csv = new-object System.Collections.ArrayList
$csv = import-csv -Path "C:\ps_proj\proj_1\a4w.csv"
$array_csv.AddRange($csv)
$dataGridView1.DataSource = $array_csv

ohne Erfolg bzw. mit dem gleichen Ergebnis.

so schwer kann es doch nicht sein. sonst gäbe es diese Forms doch nicht. ist hier vieleicht die csv als Datenquelle ungeeignet?
Member: colinardo
colinardo Jun 10, 2013 updated at 15:28:04 (UTC)
Goto Top
Hi Gundelputz,
das DataGrid-View Steuerelement ist Overkill für deinen Zweck, so einfach wie du dir das füllen des Steuerelements vorstellst geht das nicht. Dazu brauchst du noch eine DataTable und eine BindingSource (siehe hier)

Für deinen Zweck reicht ein ListView Objekt.
In Zeile 23 noch deine CSV-Datei eintragen.

Beispiel-Code zum anzeigen einer CSV:
#Helper Functions
Function Get-Matches($Pattern,$groupNumber = 0) {begin { $regex = New-Object Regex($pattern) };process { foreach ($match in ($regex.Matches($_))) { ([Object[]]$match.Groups)[$groupNumber].Value }}}

#Generated Form Function
function GenerateForm {

#region Import the Assemblies
[reflection.assembly]::loadwithpartialname("System.Drawing") | Out-Null  
[reflection.assembly]::loadwithpartialname("System.Windows.Forms") | Out-Null  
#endregion

#region Generated Form Objects
$form1 = New-Object System.Windows.Forms.Form
$txtDelim = New-Object System.Windows.Forms.TextBox
$label2 = New-Object System.Windows.Forms.Label
$btnChoose = New-Object System.Windows.Forms.Button
$label1 = New-Object System.Windows.Forms.Label
$txtCSV = New-Object System.Windows.Forms.TextBox
$lv1 = New-Object System.Windows.Forms.ListView
$btnLoadData = New-Object System.Windows.Forms.Button
$openFileDialog1 = New-Object System.Windows.Forms.OpenFileDialog
$InitialFormWindowState = New-Object System.Windows.Forms.FormWindowState
#endregion Generated Form Objects

#----------------------------------------------
#Generated Event Script Blocks
#----------------------------------------------

$handler_btnLoadData_Click= 
{
    if (Test-Path $txtCSV.text){
        $lv1.Clear()
        $csv = Get-Content $txtCSV.text
        $csvSplitChar = $txtDelim.text
        #create columns
        $firstLine = $csv.split($csvSplitChar)
        for ($i = 0; $i -lt $firstLine.length; $i++){
             $lv1.Columns.Add($firstLine[$i].Trim('"'))  
        }
        #import data
        for ($i = 1; $i -lt $csv.length; $i++){
            $lineArray = $csv[$i].split($csvSplitChar)
            $listViewItem = New-Object System.Windows.Forms.ListViewItem($lineArray.Trim('"'))  
            for ($y = 1; $y -lt $lineArray.Length; $y++){
                $listViewItem.Subitems.Add($lineArray[$y].Trim('"'))  
            }
            $lv1.Items.Add($listViewItem)
        }
        $lv1.AutoResizeColumns(2)
    }else{
        [Windows.Forms.MessageBox]::Show("Datei existiert nicht")  
    }

}

$btnChoose_OnClick= 
{
    $openFileDialog1.Filter = "CSV-Dateien(*.csv)|*.csv"  
    $openFileDialog1.MultiSelect = $False
    if ($openFileDialog1.ShowDialog() -eq 1){
        $txtCSV.text = $openFileDialog1.FileName
    }
    #Erkenne Trennzeichen der CSV-Datei
    $csvString = (Get-Content $txtCSV.text)
    $delim = $csvString | Get-Matches "^[^;,]*(.)" 1  
    $txtDelim.text = $delim
    
}

$txtCSV_TextChanged = 
{
    if ($txtCSV.text -le ""){  
        $btnLoadData.Enabled = $False
    }else{
        $btnLoadData.Enabled = $True
    }
}

$OnLoadForm_StateCorrection=
{#Correct the initial state of the form to prevent the .Net maximized form issue
	$form1.WindowState = $InitialFormWindowState
}

#----------------------------------------------
#region Generated Form Code
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 308
$System_Drawing_Size.Width = 441
$form1.ClientSize = $System_Drawing_Size
$form1.DataBindings.DefaultDataSourceUpdateMode = 0
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 320
$System_Drawing_Size.Width = 320
$form1.MinimumSize = $System_Drawing_Size
$form1.Name = "form1"  
$form1.Text = "CSV-Daten anzeigen"  

$txtDelim.DataBindings.DefaultDataSourceUpdateMode = 0
$txtDelim.Anchor = 6
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 80
$System_Drawing_Point.Y = 278
$txtDelim.Location = $System_Drawing_Point
$txtDelim.MaxLength = 1
$txtDelim.Name = "txtDelim"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 20
$System_Drawing_Size.Width = 27
$txtDelim.Size = $System_Drawing_Size
$txtDelim.TabIndex = 7
$txtDelim.Text = ","  

$form1.Controls.Add($txtDelim)

$label2.DataBindings.DefaultDataSourceUpdateMode = 0
$label2.Anchor = 6
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 12
$System_Drawing_Point.Y = 281
$label2.Location = $System_Drawing_Point
$label2.Name = "label2"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 23
$System_Drawing_Size.Width = 78
$label2.Size = $System_Drawing_Size
$label2.TabIndex = 6
$label2.Text = "Trennz."  

$form1.Controls.Add($label2)

$btnChoose.Anchor = 10

$btnChoose.DataBindings.DefaultDataSourceUpdateMode = 0

$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 298
$System_Drawing_Point.Y = 253
$btnChoose.Location = $System_Drawing_Point
$btnChoose.Name = "btnChoose"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 23
$System_Drawing_Size.Width = 31
$btnChoose.Size = $System_Drawing_Size
$btnChoose.TabIndex = 5
$btnChoose.Text = "..."  
$btnChoose.UseVisualStyleBackColor = $True
$btnChoose.add_Click($btnChoose_OnClick)

$form1.Controls.Add($btnChoose)

$label1.Anchor = 6
$label1.DataBindings.DefaultDataSourceUpdateMode = 0

$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 12
$System_Drawing_Point.Y = 258
$label1.Location = $System_Drawing_Point
$label1.Name = "label1"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 23
$System_Drawing_Size.Width = 62
$label1.Size = $System_Drawing_Size
$label1.TabIndex = 4
$label1.Text = "CSV-Datei:"  

$form1.Controls.Add($label1)

$txtCSV.Anchor = 14
$txtCSV.DataBindings.DefaultDataSourceUpdateMode = 0
$txtCSV.Enabled = $False
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 80
$System_Drawing_Point.Y = 255
$txtCSV.Location = $System_Drawing_Point
$txtCSV.Name = "txtCSV"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 20
$System_Drawing_Size.Width = 210
$txtCSV.Size = $System_Drawing_Size
$txtCSV.TabIndex = 3
$txtCSV.add_TextChanged($txtCSV_TextChanged)

$form1.Controls.Add($txtCSV)

$lv1.Anchor = 15

$lv1.DataBindings.DefaultDataSourceUpdateMode = 0
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 12
$System_Drawing_Point.Y = 12
$lv1.Location = $System_Drawing_Point
$lv1.Name = "lv1"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 235
$System_Drawing_Size.Width = 417
$lv1.Size = $System_Drawing_Size
$lv1.TabIndex = 2
$lv1.UseCompatibleStateImageBehavior = $False
$lv1.View = 1

$form1.Controls.Add($lv1)

$btnLoadData.Anchor = 10

$btnLoadData.DataBindings.DefaultDataSourceUpdateMode = 0
$btnLoadData.Enabled = $False

$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 335
$System_Drawing_Point.Y = 253
$btnLoadData.Location = $System_Drawing_Point
$btnLoadData.Name = "btnLoadData"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 23
$System_Drawing_Size.Width = 94
$btnLoadData.Size = $System_Drawing_Size
$btnLoadData.TabIndex = 1
$btnLoadData.Text = "Lade Daten"  
$btnLoadData.UseVisualStyleBackColor = $True
$btnLoadData.add_Click($handler_btnLoadData_Click)

$form1.Controls.Add($btnLoadData)

$openFileDialog1.FileName = "fd1"  
$openFileDialog1.ShowHelp = $True

#endregion Generated Form Code

#Save the initial state of the form
$InitialFormWindowState = $form1.WindowState
#Init the OnLoad event to correct the initial state of the form
$form1.add_Load($OnLoadForm_StateCorrection)
#Show the Form
$form1.ShowDialog()| Out-Null

} #End Function

#Call the Function
GenerateForm

Grüße Uwe
Member: Gundelputz
Gundelputz Jun 10, 2013 at 13:50:02 (UTC)
Goto Top
vielen dank erst mal.
beim ersten versuch deinen Code zu übernehmen sah alles wie zuvor mit dem DataGrid aus. Habe dann aber festgestellt das für das Spliten ein "," eingesetzt war aber beim in meiner CSV ein ";" als Trennzeichen verwendet wird. Nach kurzer anpassung kann ich nun sagen: ja für meinen Zweck reicht dies absolut.
Vielen Dank noch mal.

PS: die msdn-hilfe hatte ich mir auch schon angeschaut. ist hier die vb-version zutreffend?
Member: colinardo
colinardo Jun 10, 2013 at 13:57:23 (UTC)
Goto Top
ist hier die vb-version zutreffend?
.NET-Objekte sind generisch d.h. wenn du wissen willst welche Funktionen und Eigenschaften ein Objekt hat siehe in der Klassenbibliothek des .NET-Frameworks nach. Die Codekonventionen der Powershell musst du dabei natürlich einhalten, einfaches Kopieren und Einfügen wird hier nicht klappen...
Member: Gundelputz
Gundelputz Jun 10, 2013 at 14:34:22 (UTC)
Goto Top
Danke.
Nur kopieren ist auch nicht mein Ziel. Verstehen ist mir lieber.
Member: Gundelputz
Gundelputz Jun 10, 2013 at 16:05:27 (UTC)
Goto Top
bin gleich auf noch ein Problemchen gestossen.
im listview kann ich ja den ersten eintrag einer Zeile makieren. kann ich diesen auch auslesen um zB. einen dazugehörigen Wert in der entsprechenden CSV Datei zu ändern oder zu löschen.
wenn ja:
1. wie kann ich den Rückgabewert händeln(vermute mal irgend etwas mit $lv1.columns)
2. wie kann ich den Eintrag der csv ändern (muss ich eine Schleife durlaufen lassen oder geht das auch einfacher)
3. wie kann ich eine komplette Zeile einer csv löschen ohne eine leere Zeile zu erhalten
Member: colinardo
colinardo Jun 10, 2013 updated at 21:21:42 (UTC)
Goto Top
Die Seite sollte deine Fragen beantworten: http://msdn.microsoft.com/de-de/library/system.windows.forms.listview.a ...
Den Index des aktuell markierten Elemente findest du mit .SelectedIndices oder mit .SelectedItems die jeweilig markierten Einträge.
Ich würde alle Bearbeitungen im ListView-Element vornehmen und
dann zum Schluss alle Elemente des ListView-Elements per Schleife durchlaufen und die vorhandene CSV ersetzen. Die Spaltennamen nicht vergessen...
Member: Gundelputz
Gundelputz Jun 10, 2013 at 17:04:47 (UTC)
Goto Top
Tschuldigung.
Wahr doch ein wenig zu träge. Gelobe hiermit Besserung. Ist halt ein wenig verlockend nach einfacher hilfe zu suchen. Aber du hast recht besser erst lesen und dann vieleicht Fraegn. da lernt man mehr.
habe mir mal die Methoden Eigenschaften und Ereignisse angeschaut. SelectedIndex hab ich da aber nicht geunden aber SelectedIndices. Ich gehe davon aus das es sich hier nur um eine andere Schreibweise handelt. Teste das gelich mal.
Member: Gundelputz
Gundelputz Jun 10, 2013 at 17:44:31 (UTC)
Goto Top
Sorry. ich bins schon wieder. Ick steh jetz ers mal richtig uff'n Schlauch.
Also wen ich den index erfahren will rufe ich den so ab:
$lv_user.SelectedIndex
und weil ich auch sehen will welcher das ist übergebe ich diesen an ein Label:
$lbl_user_liste.text = $lv_user.SelectedIndex
und was ich sehe ist nichts.

Frust und Verzweiflung machen sich breit.
Member: colinardo
colinardo Jun 11, 2013 updated at 06:36:58 (UTC)
Goto Top
den Text der Spalten des markierten Elements erhältst du so:
$spalte1 = $lv_user.SelectedItems.Text
$spalte2 =  $lv_user.SelectedItems.Subitems[1].Text
$spalte3 =  $lv_user.SelectedItems.Subitems[2].Text
usw.
da eine Markierung in einer ListView mehrere Einträge umfassen kann wenn die MultiSelect Eigenschaft des Steuerelements auf True steht, befinden sich diese im Array .SelectedItems[x], d.h. erste markierte Zeile .SelectedItems, zweite .SelectedItems[1], usw.
Mit den ListIndices verhällt es sich genauso. D.h. die Indexnummern der markierten Einträge werden als Array zurückgegeben. Bei nur einer einfachen Markierung erhältst du den Index mit .ListIndices.

Wenn du Einträge bearbeiten willst ist das DataGridView Element aber besser geeignet, ich dachte du wolltest die CSV nur anzeigen.

Ich glaube es wäre vielleicht besser, wenn du dich mal mit einer richtigen Programmiersprache wie VB.Net oder C# in einer Entwicklungsumgebung wie einer VisualStudio Express Edition auseinandersetzt, Powershell ist ja eigentlich nur eine Scriptsprache. Dort hast du auch visuelles Feedback der Steuerelemente mit Code-Completion etc. Das was du dort entwickelst lässt sich dann mit ein wenig Anpassung in die Powershell übertragen... das nur so als Tipp nebenbei
Member: Gundelputz
Gundelputz Jun 11, 2013 at 06:06:38 (UTC)
Goto Top
Hab den Fehler gefunden. So funktioniert's:

$test_select = $lv_user.SelectedIndices
$lbl_user_liste.text = "$test_select"

War wie die Geschichte mit den Bäumen und dem Wald.
Member: colinardo
colinardo Jun 11, 2013 updated at 12:33:03 (UTC)
Goto Top
Um das ganze zu einem Abschluss zu bringen:
Das ganze mit einem DataGridView Element und vollständiger Bearbeitungsfunktionalität und automatischer Trennzeichenerkennung:

1d29adabbf434e73fc73a27bdc2f5403

Viel Erfolg weiterhin...
face-winkUwe
#Helper Functions
#Hilfsfunktion zum Regex-Gruppen-Matching
Function Get-Matches($Pattern,$groupNumber = 0) {begin { $regex = New-Object Regex($pattern) };process { foreach ($match in ($regex.Matches($_))) { ([Object[]]$match.Groups)[$groupNumber].Value }}}

#Generated Form Function
function GenerateForm {

#region Import the Assemblies
[reflection.assembly]::loadwithpartialname("System.Drawing") | Out-Null  
[reflection.assembly]::loadwithpartialname("System.Windows.Forms") | Out-Null  
#endregion

#region Generated Form Objects
$form1 = New-Object System.Windows.Forms.Form
$btnSave = New-Object System.Windows.Forms.Button
$dg1 = New-Object System.Windows.Forms.DataGridView
$txtDelim = New-Object System.Windows.Forms.TextBox
$label2 = New-Object System.Windows.Forms.Label
$btnChoose = New-Object System.Windows.Forms.Button
$label1 = New-Object System.Windows.Forms.Label
$txtCSV = New-Object System.Windows.Forms.TextBox
$btnLoadData = New-Object System.Windows.Forms.Button
$openFileDialog1 = New-Object System.Windows.Forms.OpenFileDialog
$InitialFormWindowState = New-Object System.Windows.Forms.FormWindowState
#endregion Generated Form Objects

#----------------------------------------------
#Generated Event Script Blocks
#----------------------------------------------
$handler_btnLoadData_Click= 
{
    #prüfen ob gewählte Datei existiert
    if (Test-Path $txtCSV.text){
        $csvSplitChar = $txtDelim.text
        $dg1.Rows.Clear()
        
        #Lese CSV-Datei in ein StreamReader-Objekt ein / $true = erkenne Zeichenkodierung
        $csv = New-Object System.IO.StreamReader($txtCSV.text,$True)
        
        #Lese die Überschriften der CSV-Datei in ein Array ein
        $firstLine = ($csv.Readline()).split($csvSplitChar)
        
        #Füge die Überschriften im DataGridView-Element hinzu
        for ($i = 0; $i -lt $firstLine.length; $i++){
            #entferne Dabei eventuell vorhandene Anführungszeichen
            $dg1.Columns.Add($firstLine[$i].Trim('"'),$firstLine[$i].Trim('"'))  
        }
        #Durchlaufe die Datenzeilen der CSV-Datei bis zum Ende
        while($csv.Peek() -ne -1){
            $dataline = $csv.ReadLine()
            #Splite die Zeile wieder in ein Array
            $dataline = $dataline.split($csvSplitChar) | %{$_.Trim('"')}  
            # und übergebe das Array an die Funktion zum erstellen einer Zeile des DataGridView-Elementes
            $dg1.Rows.Add($dataline)
        }
        #schließe das StreamReader-Objekt
        $csv.Close()

    }else{
        [Windows.Forms.MessageBox]::Show("Datei existiert nicht")  
    }
}

$btnChoose_OnClick= 
{
    #setze Filter für den FileDialog
    $openFileDialog1.Filter = "CSV-Dateien(*.csv)|*.csv"  
    #es darf im Dialog nur eine Datei gewählt werden
    $openFileDialog1.MultiSelect = $False
    # wenn der Dialog mit "OK" geschlossen wurde den Pfad der Datei in die Textbox übergeben  
    if ($openFileDialog1.ShowDialog() -eq 1){
        $txtCSV.text = $openFileDialog1.FileName
    }
    #Erkenne Trennzeichen der CSV-Datei
    #hole nur die erste Zeile der Datei
    $csvString = (Get-Content $txtCSV.text)
    #finde per RegEx das Trennzeichen
    $delim = $csvString | Get-Matches "^[^;,]*(.)" 1  
    $txtDelim.text = $delim
}

# Schaltet die Buttons je nach Inhalt des Textfeldes an oder aus / wenn kein Pfad vorhanden soll man die Buttons auch nicht betätigen können
$handler_txtCSV_TextChanged = 
{
    if ($txtCSV.text -le ""){  
        $btnLoadData.Enabled = $False
        $btnSave.Enabled = $False
    }else{
        $btnLoadData.Enabled = $True
    }
}
$handler_dg1_CellValueChanged = 
{
    #aktiviert den "Speichern"-Button erst wenn etwas in der Tabelle geändert wurde  
    $btnSave.Enabled = $True
}

$btnSave_OnClick= 
{
    #StreamWrite-Objekt für das schreiben der Ausgabedatei / "$false" bedeutet dabei Datei neu erstellen und nicht anhängen  
    $objWriter = New-Object System.IO.StreamWriter($txtCSV.text, $False)
    #Erstelle die Spaltennamen für die erste Zeile der CSV
    $headerline = ""  
    #Hole die Spaltennamen aus dem DataGridView-Element
    for ($i = 0; $i -lt $dg1.Columns.Count; $i++){
        
        if ($i -eq $dg1.Columns.Count -1){
            #Spaltenname ohne Trennzeichen anhängen wenn wir bei der letzten Spalte angekommen sind
            $headerline += '"' + $dg1.Columns[$i].Name + '"'  
        }else{
            #ansonsten mit Trennzeichen
            $headerline += '"' + $dg1.Columns[$i].Name + '"' + $txtDelim.text  
        }
    }
    #Schreibe die Überschriften in die Datei
    $objWriter.WriteLine($headerline)
    
    #Schreibe die Datenzeilen des DataGridView in die Datei
    For ($j = 0;$j -lt $dg1.Rows.Count -1 ; $j++){
        For ($i = 0;$i -lt $dg1.Columns.Count ; $i++){
             $cellvalue = $dg1.Item($i, $j).Value
             if ($i -eq $dg1.Columns.Count - 1){
                $rowLine += '"' + $cellvalue + '"'  
             }else{
                $rowLine += '"' + $cellvalue + '"' + $txtDelim.text  
             }
        }
        #Die Zeile in die Datei schreiben
        $objWriter.WriteLine($rowLine)
        #Variable leeren für die nächste Zeile
        $rowLine = ""  
    }
    #Streamwriter schließen
    $objWriter.Close()
    [Windows.Forms.MessageBox]::Show("Datei gespeichert!")  
}

$OnLoadForm_StateCorrection=
{#Correct the initial state of the form to prevent the .Net maximized form issue
	$form1.WindowState = $InitialFormWindowState
}

#----------------------------------------------
#region Generated Form Code
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 292
$System_Drawing_Size.Width = 467
$form1.ClientSize = $System_Drawing_Size
$form1.DataBindings.DefaultDataSourceUpdateMode = 0
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 320
$System_Drawing_Size.Width = 320
$form1.MinimumSize = $System_Drawing_Size
$form1.Name = "form1"  
$form1.Text = "CSV Bearbeiten"  


$btnSave.DataBindings.DefaultDataSourceUpdateMode = 0
$btnSave.Anchor = 10
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 361
$System_Drawing_Point.Y = 266
$btnSave.Location = $System_Drawing_Point
$btnSave.Name = "btnSave"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 23
$System_Drawing_Size.Width = 94
$btnSave.Size = $System_Drawing_Size
$btnSave.TabIndex = 9
$btnSave.Text = "Daten speichern"  
$btnSave.UseVisualStyleBackColor = $True
$btnSave.add_Click($btnSave_OnClick)
$btnSave.Enabled = $False

$form1.Controls.Add($btnSave)

$dg1.Anchor = 15
$dg1.AllowUserToOrderColumns = $True
$dg1.MultiSelect = $True
$dg1.DataBindings.DefaultDataSourceUpdateMode = 0
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 12
$System_Drawing_Point.Y = 12
$dg1.Location = $System_Drawing_Point
$dg1.Name = "dg1"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 219
$System_Drawing_Size.Width = 443
$dg1.Size = $System_Drawing_Size
$dg1.TabIndex = 8
$dg1.add_CellValueChanged($handler_dg1_CellValueChanged)

$form1.Controls.Add($dg1)

$txtDelim.Anchor = 6
$txtDelim.DataBindings.DefaultDataSourceUpdateMode = 0
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 80
$System_Drawing_Point.Y = 262
$txtDelim.Location = $System_Drawing_Point
$txtDelim.MaxLength = 1
$txtDelim.Name = "txtDelim"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 20
$System_Drawing_Size.Width = 27
$txtDelim.Size = $System_Drawing_Size
$txtDelim.TabIndex = 7
$txtDelim.Text = ","  

$form1.Controls.Add($txtDelim)

$label2.Anchor = 6
$label2.DataBindings.DefaultDataSourceUpdateMode = 0

$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 12
$System_Drawing_Point.Y = 265
$label2.Location = $System_Drawing_Point
$label2.Name = "label2"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 23
$System_Drawing_Size.Width = 78
$label2.Size = $System_Drawing_Size
$label2.TabIndex = 6
$label2.Text = "Trennz."  

$form1.Controls.Add($label2)

$btnChoose.Anchor = 10

$btnChoose.DataBindings.DefaultDataSourceUpdateMode = 0

$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 324
$System_Drawing_Point.Y = 237
$btnChoose.Location = $System_Drawing_Point
$btnChoose.Name = "btnChoose"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 23
$System_Drawing_Size.Width = 31
$btnChoose.Size = $System_Drawing_Size
$btnChoose.TabIndex = 5
$btnChoose.Text = "..."  
$btnChoose.UseVisualStyleBackColor = $True
$btnChoose.add_Click($btnChoose_OnClick)

$form1.Controls.Add($btnChoose)

$label1.Anchor = 6
$label1.DataBindings.DefaultDataSourceUpdateMode = 0

$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 12
$System_Drawing_Point.Y = 242
$label1.Location = $System_Drawing_Point
$label1.Name = "label1"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 23
$System_Drawing_Size.Width = 62
$label1.Size = $System_Drawing_Size
$label1.TabIndex = 4
$label1.Text = "CSV-Datei:"  

$form1.Controls.Add($label1)

$txtCSV.Anchor = 14
$txtCSV.DataBindings.DefaultDataSourceUpdateMode = 0
$txtCSV.Enabled = $False
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 80
$System_Drawing_Point.Y = 239
$txtCSV.Location = $System_Drawing_Point
$txtCSV.Name = "txtCSV"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 20
$System_Drawing_Size.Width = 236
$txtCSV.Size = $System_Drawing_Size
$txtCSV.TabIndex = 3
$txtCSV.add_TextChanged($handler_txtCSV_TextChanged)

$form1.Controls.Add($txtCSV)

$btnLoadData.Anchor = 10

$btnLoadData.DataBindings.DefaultDataSourceUpdateMode = 0
$btnLoadData.Enabled = $False

$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 361
$System_Drawing_Point.Y = 237
$btnLoadData.Location = $System_Drawing_Point
$btnLoadData.Name = "btnLoadData"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 23
$System_Drawing_Size.Width = 94
$btnLoadData.Size = $System_Drawing_Size
$btnLoadData.TabIndex = 1
$btnLoadData.Text = "Lade Daten"  
$btnLoadData.UseVisualStyleBackColor = $True
$btnLoadData.add_Click($handler_btnLoadData_Click)

$form1.Controls.Add($btnLoadData)

$openFileDialog1.FileName = "fd1"  
$openFileDialog1.ShowHelp = $True

#endregion Generated Form Code

#Save the initial state of the form
$InitialFormWindowState = $form1.WindowState
#Init the OnLoad event to correct the initial state of the form
$form1.add_Load($OnLoadForm_StateCorrection)
#Show the Form
$form1.ShowDialog()| Out-Null

} #End Function

#Call the Function
GenerateForm
Member: Gundelputz
Gundelputz Jun 11, 2013 at 08:26:29 (UTC)
Goto Top
vielen Dank (wieder ein mal)

So langsam beginne ich den Umfang von PS zu verstehen. Ich habe schon immer ein wenig "programmiert" und habe bis jetzt noch nicht die richtige Sprache für mich gefunden. wie bei den meisten meines jahrgangs hab ich mit QBasic angefangen. Dann etwas PowerBasic, Darkbasic, Dephi und schliesslich VBA.
bis vor 2 Wo. habe ich haupsächlich mit Excel und VBA(für die Arbeit) und privat mit 3DGS(LiteC) gearbeitet. Leider habe ich bis jetzt noch nicht die eierlegende Wollmilchsau gefunden. Bei uns im Haus giebt es knapp 20 Admin's und jeder schwört auf was anderes.
Ich hoffe das PS ein guter wiedereinstig für mich ist. Bis jetzt bin ich jedenfalls begeister auch wenn ich schon ein paar Schwachstellen für mich erkannt habe so ist klar das PS dir deine tägliche Arbeit extrem erleichtern kann. Mein Primärziel habe ich bereits erreicht.

an dieser Stelle möchte ich grosses Lob an dieses Forum ausstellen. Hier habe ich bis jetzt nur Fachlich kompetente Hilfe erhalten ohne blöde Sprüche für jemanden der noch ganz am Anfang steht.
macht weiter so.
Member: Gundelputz
Gundelputz Jun 11, 2013 at 09:05:18 (UTC)
Goto Top
Bowwww echt starker Toback(für mich) was du da so schnell gezaubert hast. Das ist für mich wie ein Tuturial. sehr interessant.