Avatar billede dennism Nybegynder
10. september 2008 - 12:18 Der er 11 kommentarer og
1 løsning

C#: WPF grid layout

Jeg sidder og forsøger at lave en lille studieopgave som skal laves i grid layout i en WPF-appliktion. Jeg bruger Visual Studio 2008.

Programmet indlæser en csv-fil, der har 4 kolonner og x antal rækker. I XAML kan jeg opstille et grid-layout, men mit problem er, at jeg skal kunne tilgå grid-layoutet og indsætte rækker (og evt. flere kolonner) fra koden.

Jeg lavede dette Grid i min XAML:
    <Grid Name="Grid">
        <Grid.RowDefinitions>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Name="col1"/>
            <ColumnDefinition Name="col2"/>
            <ColumnDefinition Name="col3"/>
            <ColumnDefinition Name="col4"/>
        </Grid.ColumnDefinitions>
    </Grid>

Som I kan se, har jeg sat et name på det (Grid). Hensigten med det er, at jeg fra koden (for hver gang while/for-løkken kører) at kunne tilføje flere rækker til dette grid. Men jeg kan ikke gennemskue hvordan - griber jeg det forkert an eller har jeg misset noget? Jeg synes ikke at kunde finde nogle metoder på Grid som kan klare det ønskede.

Dette er sikkert et simpelt problem, men er lige begyndt på C# så skal lige vænne mig til hvordan det fungerer.
På forhånd tak.
Avatar billede aaberg Nybegynder
10. september 2008 - 13:25 #1
En Grid i WPF er ikke beregnet til at vise data, men i stedet beregnet til at vise kontroller (knapper og tekstbokse osv), hvor placeringen er styret af Gridden.

I stedet skal du bruge en DataGridView kontrol. Problemet med denne kontrol er, at det er en Windows Forms Control, og ikke er beregnet til at blive brugt i WPF. Det kan dog lade sig gøre, ved at tilføje en WindowsFormsHost control, og "hoste" din DataGridView i den.

Jeg fandt en detaljeret beskrivelse af dette her:
http://geekswithblogs.net/lorint/archive/2006/09/09/90740.aspx

For at fylde data i en DataGridView, kan du loope igennem din CSV fil, og tilføje kolonner og rækker til en instans af DataTable klassen. Når det er gjort, sætter du DataSource propertien på DataGridView kontrollen til dit DataTable objekt.
Avatar billede dennism Nybegynder
10. september 2008 - 13:35 #2
Min opgave lyder på, at lave det i en grid i WPF. Jeg havde også planlagt at kopiere data fra csv-filen over i en tekstboks og indsætte den i mit grid.
Avatar billede aaberg Nybegynder
10. september 2008 - 13:54 #3
Du tilføjer rækker sådan:
this.Grid.RowDefinitions.Add(new RowDefinition());

For at placere et tekstboks i et bestemt felt (f.eks. kolonne 2, række 4), gør du sådan.

TextBox tb = new TextBox();
tb.Text = "put noget data i boksen";

Grid.SetRow(tb, 4);
Grid.SetColumn(tb, 2);
this.Grid.Children.Add(tb);
Avatar billede aaberg Nybegynder
10. september 2008 - 13:55 #4
Hvis du vil have synlige Grid lines, kan du sætte propertien ShowGridLines på Grid kontrollen.
Avatar billede Slettet bruger
14. september 2008 - 21:42 #5
en lille detalje aaberg_cc:
SetRow /SetColumn er index-0-baseret, så for at indsætte i kolonne 2, række 4 skal det være:
Grid.SetRow(tb, 3);
Grid.SetColumn(tb,1);

Hvis tallene ligger uden for bounds bliver de nemlig ignoreret.
Avatar billede aaberg Nybegynder
15. september 2008 - 08:05 #6
goblinhero: Du har selvfølgelig helt ret :-)
Avatar billede dennism Nybegynder
15. september 2008 - 10:09 #7
Når man skriver et WPF-program, har man så ikke mulighed for at udskrive noget til konsolen? Det plejer jeg at bruge til at debugge mit program.
Avatar billede dennism Nybegynder
15. september 2008 - 10:21 #8
En anden ting, som jeg håber I kan hjælpe mig med:

Jeg er MEGET træt af, at visual studie opstiller en metode sådan:
public Method()
{
...kode
}

Er det ikke muligt et sted og lave det om, så den istedet skriver:
public Method() {
  ...kode
}

Det samme gælder if, for, while m.m.
Avatar billede aaberg Nybegynder
15. september 2008 - 10:29 #9
Den bedste måde at debugge på, er at sætte et breakpoint, og bruge Visual Studios debugging funktionalitet. Dette giver meget bedre kontrol, end du nogensinde kan få med at skrive ting ud i et konsolvindue.

Men, når det er sagt, jo du kan godt skrive ting ud i konsolvinduet fra WPF. Bare brug Console.WriteLine() eller Console.Write() metoderne. Du får ikke et eget konsolvindue, men alt du skriver til kommer til Output vinduet i Visual Studio. For at få frem Output vinduet, klikker du View -> Output
Avatar billede aaberg Nybegynder
15. september 2008 - 10:35 #10
Du kan godt ændre hvordan metoder og forløkker osv opsættes i Visual Studio.

Først trykker du "Tools -> Options..". I nogen versioner af Visual Studio, er der en lille checkboks nede i venstre hjørne som hedder "Show All Settings". Denne skal være checked. Den option du leder efter, ligger under "Text Editor -> C# -> Formatting -> New Lines"
Avatar billede dennism Nybegynder
15. september 2008 - 13:37 #11
Mange tak.

Vil du smide et svar, aaberg?
Avatar billede aaberg Nybegynder
15. september 2008 - 13:51 #12
Selvfølgelig :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester