让datagrid具有动态列号,如:
<DataGrid DataGridCell.Selected="DataGrid_GotFocus" EnableColumnVirtualization="true" EnableRowVirtualization="true" Name="dataGrid1" DockPanel.Dock="Top" AutoGenerateColumns="False"
Height="120" Width="Auto" CanUserReorderColumns="False" CanUserResizeColumns="False" CanUserAddRows="false" CanUserResizeRows="False" CanUserSortColumns="False" CellEditEnding="dataGrid1_CellEditEnding">
</DataGrid>
for (var i = datetime; i < datetime.AddDays(1); i += TimeSpan.FromHours(1))
{
var column = new DataGridTemplateColumn();
column.Header = (i.Hour + 1).ToString();
column.Width = 30;
column.CellTemplate = (DataTemplate)XamlReader.Load(
new MemoryStream(Encoding.Default.GetBytes(
@"<DataTemplate xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'><TextBlock Text='{Binding ValuesExtended[" + i.Hour + @"].value_nullable, UpdateSourceTrigger=PropertyChanged}'/></DataTemplate>"
)));
column.CellEditingTemplate = (DataTemplate)XamlReader.Load(
new MemoryStream(Encoding.Default.GetBytes(
@"<DataTemplate xmlns='http://schemas.microsoft.com/winfx/2006/xaml/presentation' xmlns:x='http://schemas.microsoft.com/winfx/2006/xaml'><TextBox Text='{Binding ValuesExtended[" + i.Hour + @"].value_nullable, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}'/></DataTemplate>"
)));
dataGrid1.Columns.Add(column);
}
dataGrid1.ItemSource = data;
现在我想要一个带复选框而不是文本的特殊行,我该怎么办? Google搜索示例,仅找到复选框列。
答案 0 :(得分:0)
嗨,这样做的逻辑是
<Window.Resources>
<DataGridRow x:Key="dr">
<DataGridRow.Template>
<ControlTemplate>
<StackPanel Width="400" Orientation="Horizontal">
<CheckBox Width="100"/>
<CheckBox Width="100"/>
<CheckBox Width="100"/>
<CheckBox Width="100"/>
</StackPanel>
</ControlTemplate>
</DataGridRow.Template>
</DataGridRow>
</Window.Resources>
<Grid >
<DataGrid AutoGenerateColumns="False" Width="400" CanUserAddRows="True" ItemsSource="{Binding PhoneNumbers}" LoadingRow="DataGrid_LoadingRow">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Name}" Header="Name" Width="100"></DataGridTextColumn>
<DataGridTextColumn Binding="{Binding Name}" Header="Name" Width="100"></DataGridTextColumn>
<DataGridTextColumn Binding="{Binding Name}" Header="Name" Width="100"></DataGridTextColumn>
<DataGridTextColumn Binding="{Binding Name}" Header="Name" Width="100"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
private void DataGrid_LoadingRow(object sender, DataGridRowEventArgs e)
{
if (e.Row.Item.ToString().Equals("{NewItemPlaceholder}"))
{
e.Row.Item = this.FindResource("dr");
e.Row.DetailsVisibility = Visibility.Visible;
}
}
这不是精确的,但这个想法有点相同。我希望这会有所帮助