Wander_nyanko
@Wander_nyanko

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

WPF 似た要素を数十個単位で作成する場合

(自己解決のためクローズ)

聞きたいこと

WPFで似た要素を数十個単位で作成する必要がある場合、xamlにはどのように記述するのが適切なのでしょうか。

開発環境

OS:windows10
IDE:visual studio 2022
言語:C#11.0
フレームワーク:.NET 7.0

質問内容

現在諸事情あり、DataGridに ◆◆1~◆◆100 の列を作成し表示するというアプリを作成しています。
現状以下のような記述になっているのですが、これは適切といえるのでしょうか?

記述の改善方法、またこういった場合のバインドはどのように扱うのが良いか、など
ありましたらお教え頂けますと幸いです。

<Grid Background="#FFE5E5E5">
    <DataGrid Name="testGrid" AutoGenerateColumns="False">
        <DataGrid.Columns>

            <DataGridTextColumn  Header="head" Binding="{Binding head}"/>

            <DataGridTextColumn  Header="test1" Binding="{Binding test[0]}"/>
            <DataGridTextColumn  Header="test2" Binding="{Binding test[1]}"/>
            <DataGridTextColumn  Header="test3" Binding="{Binding test[2]}"/>
            <DataGridTextColumn  Header="test4" Binding="{Binding test[3]}"/>

            ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~

            <DataGridTextColumn  Header="test97" Binding="{Binding test[96]}"/>
            <DataGridTextColumn  Header="test98" Binding="{Binding test[97]}"/>
            <DataGridTextColumn  Header="test99" Binding="{Binding test[98]}"/>
            <DataGridTextColumn  Header="test100" Binding="{Binding test[99]}"/>

        </DataGrid.Columns>
    </DataGrid>
</Grid>

0

1Answer

開発環境(OS, Visual Studio のバージョン、.NET or .NET Framework どっちかとそのバージョンなど)を質問欄を編集して追記してください。

DataGridに ◆◆1~◆◆100 の列を作成し表示する

その列の中身はどうするのですか?

1Like

Comments

  1. @Wander_nyanko

    Questioner

    列内で使用するデータはソース内で作成します
    現在はバインドしているtest[]に100個分のデータを格納するようなつくりとしています

  2. 何がしたいのか分からないので、質問者さんの目的に合っているかどうかは分かりませんが、参考程度に以下のようなやり方もあるという方法を紹介しておきます。

    <Window x:Class="WpfApp1.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:WpfApp1"
            mc:Ignorable="d"
            Title="MainWindow" Height="450" Width="800">
        <Grid>
            <DataGrid x:Name="dataGrid" HorizontalAlignment="Left" VerticalAlignment="Top" />
        </Grid>
    </Window>
    
    using System.Data;
    using System.Windows;
    
    namespace WpfApp1
    {
        /// <summary>
        /// Interaction logic for MainWindow.xaml
        /// </summary>
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
    
                var table = new DataTable();
    
                table.Columns.Add("head", typeof(string));
                for (int i = 0; i < 100; i++)
                {
                    table.Columns.Add($"test{i + 1}", typeof(string));
                }
    
                this.dataGrid.ItemsSource = table.DefaultView;
    
    
                var row = table.NewRow();
                row["head"] = "abc";
                row["test1"] = "def";
                row["test10"] = "ghi";
                table.Rows.Add(row);
            }
        }
    }
    

    結果は:

    wpf.jpg

    列内で使用するデータはソース内で作成します

    ということなので、データをすべて取得して List<T> 型なり DataTable 型のオブジェクトにまとめてから、それを DataGrid にバインドした方が良さそうな気もします。

Your answer might help someone💌