[.NET] Gridにrowを追加する

大きさを固定したGridを使うことが多く、動的にGridに行を追加する方法がわからず試行錯誤してしまった。
簡単なことだけどメモ。

XAMLにはColumnDefinitionをして行は1個だけ入れておく。
Gridにはコードからアクセスできるように名前を付ける。

<ScrollViewer>
  <StackPanel>
     <Grid Name="mygrid">
       <Grid.ColumnDefinitions>
           <ColumnDefinition Width="Auto" />
           <ColumnDefinition Width="Auto" />
       </Grid.ColumnDefinitions>
       <Grid.RowDefinitions>
          <RowDefinition Height="Auto" />
       </Grid.RowDefinitions>
    </Grid>
  </StackPanel>
</ScrollViewer>

code behindではColumnごとのデータを作り、行はカウントアップ。ここでは自分で定義したクラスのメンバーをLabelで受けてGridに追加しているつもり。
最後にRowDefinitionsのAddメソッドでRowDefinitionを追加。

        public MainWindow()
        {
            InitializeComponent();

            MyPacket mp = new MyPacket();

            for (int i = 0; i < 10; i++)
            {
                Label lbl = new Label();
                lbl.Content = mp.Number;
                mygrid.Children.Add(lbl);
                Grid.SetColumn(lbl, 0);
                Grid.SetRow(lbl, i);

                lbl = new Label();
                lbl.Content = mp.DateTime;
                mygrid.Children.Add(lbl);
                Grid.SetColumn(lbl, 1);
                Grid.SetRow(lbl, i);

                mygrid.RowDefinitions.Add(new RowDefinition());
            }

Windows Formsの系統には、DataGridViewという便利なクラスがある。

スプレッドシート風なGUIを簡単に実現できる。WPFでこれを使用するには参照の追加で、System.Windows.Formsを追加しなければならない。
また、これをusingに追加すると、Labelのように同名のクラスがある場合にはあいまいになり、Controls.LabelとかForms.Labelとか指定する必要が出てくる。

コメントを残す