How do I add Checkbox dynamically in a Grid in WPF application?

advertisements

I would like to add some Checkbox in a Grid control dynamically when the window is loaded in my C# Desktop application. How many times the checkbox will appear depends on the number of entries in a table. Here, I used LINQ To SQL class. The Grid control is defined in XAML.

...
<Grid Name="grid1">
   <!-- here i would like to show all check box -->
</Grid>
...

Code behind file:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
// class declaration ...
...
private void course_Loaded(object sender, RoutedEventArgs e)
    {
        List<Course> courses = ldc.Courses.ToList();
        foreach (var c in courses)
        {
            CheckBox cb = new CheckBox();
            cb.Name=c.CourseID.ToString();
            cb.Content = c.CourseID.ToString();
            //grid1.Controls.Add(cb); does not work. what to do here?
        }
    }

This code is not working. Any suggession? Thankyou.


I suggest adding these CheckBoxes to a StackPanel and then add the StackPanel to the grid:

StackPanel innerStack;

private void course_Loaded(object sender, RoutedEventArgs e)
{
    innerStack= new StackPanel{Orientation=Orientation.Vertical};
    List<Course> courses = ldc.Courses.ToList();

    foreach (var c in courses)
    {
        CheckBox cb = new CheckBox();
        cb.Name=c.CourseID.ToString();
        cb.Content = c.CourseID.ToString();
        innerStack.Chicldren.Add(cb);
    }
    Grid.SetColumn(innerStack,  /*Set the column of your stackPanel, default is 0*/);
    Grid.SetRow(innerStack,  /*Set the row of your stackPanel, default is 0*/);
    Grid.SetColumnSpan(innerStack,  /*Set the columnSpan of your stackPanel, default is 1*/);
    Grid.SetRowSpan(innerStack,  /*Set the rowSpan of your stackPanel, default is 1*/);

    Grid.Children.Add(innerStack);
}

If you do not want this structure, you should add som RowDefinition to your grid and use Grid.SetRow(cb, int) methhod to put ComboBoxes over each other.