私の工場の一部のツールでテストに関する情報を表示する新しいプログラムを開発中です。 これを実行するために、私は実行時にDataGridコントロールを作成し、それを作成しています。この部分はうまく機能しています。WPFの背後にあるコードでDataGridRowsDetailsを作成
私の問題はRowDetailsを追加することです。どうすればそのコードの中で行うことができますか?
if (datatable.Rows.Count != 0)
{
foreach (DataRow dt in datatable.Rows)
{
if (last_tool_test == "" || last_tool_test != dt[1].ToString())
{
last_tool_test = dt[1].ToString();
txt = new TextBlock();
txt.Text = dt[1].ToString() + " :";
txt.TextDecorations = TextDecorations.Underline;
txt.HorizontalAlignment = HorizontalAlignment.Center;
txt.Margin = new Thickness(0, 0, 0, 7);
data = new DataGrid();
data.Width = double.NaN;
data.Margin = new Thickness(5, 0, 5, 5);
data.HeadersVisibility = DataGridHeadersVisibility.Column;
data.CanUserAddRows = false;
data.CanUserDeleteRows = false;
data.CanUserReorderColumns = false;
data.CanUserResizeColumns = false;
data.CanUserSortColumns = false;
data.IsReadOnly = true;
data.SelectionMode = DataGridSelectionMode.Extended;
DataGridTextColumn col1 = new DataGridTextColumn();
col1.Header = "Recipe Name";
col1.Binding = new Binding("Recipe_Name");
col1.Width = new DataGridLength(1, DataGridLengthUnitType.Star);
var style = new Style(typeof(DataGridColumnHeader));
style.Setters.Add(new Setter()
{
Property = HorizontalAlignmentProperty,
Value = HorizontalAlignment.Stretch
});
style.Setters.Add(new Setter()
{
Property = HorizontalContentAlignmentProperty,
Value = HorizontalAlignment.Center
});
style.Setters.Add(new Setter()
{
Property = FontWeightProperty,
Value = FontWeights.Bold
});
var style1 = new Style(typeof(TextBlock));
style1.Setters.Add(new Setter()
{
Property = HorizontalAlignmentProperty,
Value = HorizontalAlignment.Center
});
col1.HeaderStyle = style;
col1.ElementStyle = style1;
data.Columns.Add(col1);
DataGridTextColumn col2 = new DataGridTextColumn();
col2.Header = "Foup";
col2.Width = 100;
col2.Binding = new Binding("Foup");
col2.HeaderStyle = style;
col2.ElementStyle = style1;
data.Columns.Add(col2);
DataGridTextColumn col3 = new DataGridTextColumn();
col3.Header = "Need Reference?";
col3.Width = 110;
col3.HeaderStyle = style;
col3.ElementStyle = style1;
col3.Binding = new Binding("Reference");
data.Columns.Add(col3);
DataGridTextColumn col4 = new DataGridTextColumn();
col4.Header = "# Iteration";
col4.Width = 100;
col4.HeaderStyle = style;
col4.ElementStyle = style1;
col4.Binding = new Binding("Iteration");
data.Columns.Add(col4);
DataGridTextColumn col5 = new DataGridTextColumn();
col5.Header = "Spec";
col5.Width = 100;
col5.HeaderStyle = style;
col5.ElementStyle = style1;
data.Columns.Add(col5);
col5.Binding = new Binding("Spec");
st.Children.Add(txt);
st.Children.Add(data);
}
data.Items.Add(new Tool_Test() { Recipe_Name = dt[2].ToString(), Foup = dt[3].ToString(), Reference = dt[4].ToString(), Iteration = dt[5].ToString(), Spec = dt[6].ToString() });
}
last_tool_test = "";
}
}
編集:私はリソースを使用して、解決策を見つけたと思う:今では半分働いて
data.RowDetailsTemplate = (DataTemplate)this.Resources["CustomTemplate"];
:
<Window.Resources>
<DataTemplate x:Key="CustomTemplate">
<DataGrid x:Name="datagrid1" HeadersVisibility="Column" CanUserAddRows="False" CanUserDeleteRows="False" CanUserResizeRows="False" SelectionMode="Extended" Margin="5,0,5,50" CanUserResizeColumns="False" AutoGenerateColumns="False" VerticalAlignment="Top" IsReadOnly="True" Width="750">
<DataGrid.Columns>
<DataGridTextColumn Header="Sub Test Name" Width="*" Binding="{Binding Path=Recipe_Name}">
<DataGridTextColumn.HeaderStyle>
<Style TargetType="DataGridColumnHeader">
<Setter Property="HorizontalAlignment" Value="Stretch"/>
<Setter Property="HorizontalContentAlignment" Value="Center"/>
<Setter Property="FontWeight" Value="Bold" />
</Style>
</DataGridTextColumn.HeaderStyle>
<DataGridTextColumn.ElementStyle>
<Style TargetType="TextBlock">
<Setter Property="HorizontalAlignment" Value="Center" />
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
<DataGridTextColumn Header="Spec" Width="*" Binding="{Binding Path=Foup}">
<DataGridTextColumn.HeaderStyle>
<Style TargetType="DataGridColumnHeader">
<Setter Property="HorizontalAlignment" Value="Stretch"/>
<Setter Property="HorizontalContentAlignment" Value="Center"/>
<Setter Property="FontWeight" Value="Bold" />
</Style>
</DataGridTextColumn.HeaderStyle>
<DataGridTextColumn.ElementStyle>
<Style TargetType="TextBlock">
<Setter Property="HorizontalAlignment" Value="Center" />
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
</DataTemplate>
</Window.Resources>
と私のコードで私はこれを追加しました。私はリソースへの経験がないので、データをバインドするソリューションを見つけることができません。どうやってやるの?
ありがとうございました。
なぜコードビハインド(C#)を使用してDataGridTextColumnを追加しているのですが、より効率的な方法はXAMLを使用することです。 –
私は自分のデータベース – dadou
@dadouから各要素のDatagridコントロールを作成しているので、データバインディングを使用し、グリッドでデータテンプレートを構築する必要があります。 –