1. 程式人生 > 其它 >WPF DataGrid操作

WPF DataGrid操作

AutoGenerateColumns 自動生成列

GridLinesVisibility    網格線可見性

CanUserDeleteRows  使用者是否可以刪除行

CanUserAddRows   使用者是否可以新增行

文字居中

<Style x:Key="CenterAlignmentStyle" TargetType="TextBlock">
    <Setter Property="TextAlignment" Value="Center"/>
    <Setter Property="VerticalAlignment" Value="Center"
/> </Style> <DataGridTextColumn Header="工步號" Width="50" Binding="{Binding StepID}" IsReadOnly="True" ElementStyle="{StaticResource CenterAlignmentStyle }"/>

右鍵選中

// 右鍵點選觸發事件
MouseRightButtonDown="DataGrid_MouseRightButtonDown" 
// 只能選中一行
SelectionMode="Single"
private void DataGrid_MouseRightButtonDown(object
sender, MouseButtonEventArgs e) { // 獲取座標 Point p = e.GetPosition((ItemsControl)sender); // 通過指定 Point 返回命中測試的最頂層 Visual 物件。 HitTestResult htr = VisualTreeHelper.HitTest((ItemsControl)sender, p); TextBlock o
= htr.VisualHit as TextBlock; if (o != null) { DataGridRow dgr = GetParentObject<DataGridRow>(o) as DataGridRow; dgr.Focus(); dgr.IsSelected = true; } } public T GetParentObject<T>(DependencyObject obj) where T : FrameworkElement { DependencyObject parent = VisualTreeHelper.GetParent(obj); while (parent != null) { if (parent is T) { return (T)parent; } parent = VisualTreeHelper.GetParent(parent); } return null; }

自定義列 不需要雙擊選擇

<DataGridTemplateColumn Header="測試項" SortMemberPath="IsSelected" Width="100">
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <CheckBox IsChecked="{Binding Path=IsSelected,UpdateSourceTrigger=PropertyChanged}"
                                          HorizontalAlignment="Center"
                                          Command="{Binding Path=DataContext.SelectTestItemCommand ,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGrid}}}"
                                          Content="{Binding ItemName}"/>
                                
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>

模板

            <DataGrid AutoGenerateColumns="False" GridLinesVisibility="None" CanUserDeleteRows="False"
                      CanUserAddRows="False" FontSize="13" ItemsSource="{Binding TestList}">
                <DataGrid.Columns>
                    <DataGridTextColumn Header="序號" Binding="{Binding ID}" Width="50"/>
                    <DataGridTemplateColumn Header="測試項" SortMemberPath="IsSelected" Width="100">
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <CheckBox IsChecked="{Binding Path=IsSelected,UpdateSourceTrigger=PropertyChanged}"
                                          HorizontalAlignment="Center"
                                          Command="{Binding Path=DataContext.SelectTestItemCommand ,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGrid}}}"
                                          Content="{Binding ItemName}"/>
                                
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>
                    <!--<DataGridTextColumn Header="測試次數"  Binding="{Binding Number}" Width="50"/>-->
                </DataGrid.Columns>
            </DataGrid>