WPF AutoGenerateColumns

索引サイト

DataGrid 表示2パターン
DataTable を使用した場合ヘッダがうまく表示されないパターン




<Window.Resources>
<Style x:Key="center" TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="HorizontalContentAlignment" Value="Center"/>
<Setter Property="FontSize" Value="16"/>
</Style>
</Window.Resources>
<Viewbox>
<Canvas Height="700" Width="1200">
<Grid Height="700" Width="1200">
<Grid.RowDefinitions>
<RowDefinition Height="18*"/>
<RowDefinition Height="317*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="2*"/>
<ColumnDefinition Width="6*"/>
</Grid.ColumnDefinitions>
<DataGrid Name="dataGrid1" Margin="5" Grid.Row="1" AutoGenerateColumns="False" SelectionChanged="dataGrid1_SelectionChanged">
<DataGrid.Columns>
<DataGridTextColumn Header="1" Binding="{Binding G1Code}" Width="25" IsReadOnly="True" />
<DataGridTextColumn Header="2" Binding="{Binding G2Code}" Width="25" IsReadOnly="True" />
<DataGridTextColumn Header="3" Binding="{Binding G3Code}" Width="25" IsReadOnly="True" />
<DataGridTextColumn Header="名称" Binding="{Binding G3Name}" Width="180" IsReadOnly="True" HeaderStyle="{StaticResource center}">
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>

<DataGrid Name="dataGrid2" Grid.Column="1" Margin="5" Grid.RowSpan="2" >
<DataGrid.Columns>

<!--機能しない
<DataGridTextColumn x:Name="col_G1Code" Header="G1" Binding="{Binding Path=G1Code}" Width="25" IsReadOnly="True" />
<DataGridTextColumn Header="G2" Binding="{Binding G2Code}" Width="25" IsReadOnly="True" />
<DataGridTextColumn Header="G3" Binding="{Binding G3Code}" Width="25" IsReadOnly="True" />
<DataGridTextColumn Header="G4" Binding="{Binding G4Code}" Width="25" IsReadOnly="True" />
<DataGridTextColumn Header="G5" Binding="{Binding G5Code}" Width="25" IsReadOnly="True" />
<DataGridTextColumn Binding="{Binding TkCode}" Width="180" IsReadOnly="True" HeaderStyle="{StaticResource center}" Header="TkCode"/>
<DataGridTextColumn Binding="{Binding TkRyak}" Width="180" IsReadOnly="True" HeaderStyle="{StaticResource center}" Header="略称"/>
<DataGridTextColumn Binding="{Binding LastDate}" Width="180" IsReadOnly="True" HeaderStyle="{StaticResource center}" Header="出荷日"/>
<DataGridTextColumn Binding="{Binding G5Name}" Width="180" IsReadOnly="True" HeaderStyle="{StaticResource center}" Header="品名"/>
<DataGridTextColumn Binding="{Binding G5Tani}" Width="180" IsReadOnly="True" HeaderStyle="{StaticResource center}" Header="単位"/>
<DataGridTextColumn Binding="{Binding G4Genk}" Width="180" IsReadOnly="True" HeaderStyle="{StaticResource center}" ElementStyle="{StaticResource right}" Header="原価"/>
<DataGridTextColumn Binding="{Binding G6Tank}" Width="180" IsReadOnly="True" HeaderStyle="{StaticResource center}" ElementStyle="{StaticResource right}" Header="単価"/>
-->
</DataGrid.Columns>
<DataGrid.ContextMenu>
<ContextMenu>
<MenuItem Header="データ処理">
<MenuItem Name="contextMenuDelete" Header="削除" Click="contextMenuDelete_Click" />
</MenuItem>
</ContextMenu>
</DataGrid.ContextMenu>
</DataGrid>

<Grid Margin="2" Height="32" VerticalAlignment="Bottom" >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="2*"/>
<ColumnDefinition Width="2*"/>
<ColumnDefinition Width="2*"/>
<ColumnDefinition Width="8*"/>
<ColumnDefinition Width="5*"/>
</Grid.ColumnDefinitions>
<TextBox Name="textBox_G1Code" Margin="1" Text="99" Grid.Column="0" VerticalAlignment="Center" />
<TextBox Name="textBox_G2Code" Margin="1" Text="99" Grid.Column="1" VerticalAlignment="Center" />
<TextBox Name="textBox_G3Code" Margin="1" Text="00" Grid.Column="2" VerticalAlignment="Center" />
<TextBlock Grid.Column="3" Margin="1" Text="コード選択 or " VerticalAlignment="Center" HorizontalAlignment="Right"/>
<Button Content="全件検索" Grid.Column="4" Margin="1" />
</Grid>
<GroupBox Name="groupBox1" Grid.Column="1" Header="GroupBox" Margin="220" Grid.Row="1" Background="SkyBlue" Visibility="Visible" >
<Grid Margin="10" >
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.ColumnSpan="2" Margin="5" TextWrapping="Wrap" Text="TextBlock" Name="txb_Message"/>

<TextBlock Grid.Row="1" Margin="5" TextWrapping="Wrap" Text="TextBlock" />
<TextBlock Grid.Row="2" Margin="5" TextWrapping="Wrap" Text="TextBlock" />
<TextBlock Grid.Row="3" Margin="5" TextWrapping="Wrap" Text="TextBlock" />
<TextBlock Grid.Row="4" Margin="5" TextWrapping="Wrap" Text="TextBlock" />

<TextBlock Grid.Column="1" Grid.Row="1" Margin="5" TextWrapping="Wrap" Text="TextBlock" Name="txb_TkCode_msg" />
<TextBlock Grid.Column="1" Grid.Row="2" Margin="5" TextWrapping="Wrap" Text="TextBlock" Name="txb_G3Code_msg" />
<TextBlock Grid.Column="1" Grid.Row="3" Margin="5" TextWrapping="Wrap" Text="TextBlock" Name="txb_G4Code_msg" />
<TextBlock Grid.Column="1" Grid.Row="4" Margin="5" TextWrapping="Wrap" Text="TextBlock" Name="txb_G5Code_msg" />
</Grid>
</GroupBox>
</Grid>
</Canvas>
</Viewbox>

DataTable 直でなければ普通に表示される。




String w_SQL = null;
w_SQL += "select G3Code,G3Name from tb_gr3mst";
w_SQL += " where G1Code = '" + this.textBox_G1Code.Text + "'";
w_SQL += " and G2Code = '" + this.textBox_G2Code.Text + "'";
w_SQL += " order by G3Code";

System.Data.Odbc.OdbcDataAdapter w_Adapter = new System.Data.Odbc.OdbcDataAdapter(w_SQL, z_odbc_DataBase);
DataTable w_dataTable = new System.Data.DataTable();
w_Adapter.Fill(w_dataTable);
z_odbc_DataBase.Close();

this.dataGrid1.ItemsSource = w_dataTable.DefaultView;
this.dataGrid2.FontSize = 14;

DataContext が思惑通りに動作しない。AutoGenerateColumns を未定義にして自動作成後、ヘッダ項目をセットする。
Style をコード定義




this.dataGrid2.ItemsSource = w_dataTable.DefaultView;
//**this.dataGrid2.DataContext = w_dataTable;-->うまく動作しない。
this.dataGrid2.FontSize = 15;

this.dataGrid2.Columns[0].Header = "G1";
this.dataGrid2.Columns[1].Header = "G2";
this.dataGrid2.Columns[2].Header = "G3";
this.dataGrid2.Columns[3].Header = "G4";
this.dataGrid2.Columns[4].Header = "G5";
this.dataGrid2.Columns[5].Header = "TkCode";
this.dataGrid2.Columns[6].Header = "略称";
this.dataGrid2.Columns[7].Header = "出荷日";
this.dataGrid2.Columns[8].Header = "品名";
this.dataGrid2.Columns[9].Header = "単位";
this.dataGrid2.Columns[10].Header = "原価";
this.dataGrid2.Columns[11].Header = "単価";

Style w_style = new Style(typeof(DataGridCell));
w_style.Setters.Add(new Setter(DataGrid.HorizontalAlignmentProperty, HorizontalAlignment.Right));
this.dataGrid2.Columns[10].CellStyle = w_style;
this.dataGrid2.Columns[11].CellStyle = w_style;

DataRowにて書式編集(DataTable 内で編集)




Double w_G4Genk = Convert.ToDouble(w_odbcReader["G4Genk"]);
w_dataRow["G4Genk"] = String.Format("{0:#,0.00}", w_G4Genk);
Double w_G6Tank = Convert.ToDouble(w_odbcReader["G6Tank"]);
w_dataRow["G6Tank"] = String.Format("{0:#,0.00}", w_G6Tank);




AX