一、wpf- DataGrid 四種列及其資料類型
DataGridTextColumn (string)
DataGridCheckBoxColumn (Boolean)
DataGridComboBoxColumn (Enum)
DataGridHyperlinkColumn (Uri)
二、wpf- DataGrid 常用屬性和事件
元件所在命名空間:
System.Windows.Controls
元件常用屬性:
AlternatingRowBackground:擷取或設定一個筆刷用來描繪DataGrid奇數行的背景。
AreRowDetailsFrozen:擷取或設定一個值用來判斷是否當機每行内容的詳細資訊。
AreRowGroupHeadersFrozen:擷取或設定一個值用來判斷是否當機分組行的頭部。
AutoGenerateColumns:擷取或設定一個值用來判斷是否允許自動生成表列。
CanUserReorderColumns:擷取或設定一個值用來判斷是否允許使用者重新排清單列的位置。
CanUserSortColumns:擷取或設定一個值用來判斷是否允許使用者按列對表中内容進行排序。
CellStyle:擷取或設定單元格的樣式。
ColumnHeaderHeight:擷取或設定列頭的高度。
ColumnHeaderStyle:擷取或設定列頭的樣式。
Columns:擷取元件中包含所有列的集合。
ColumnWidth:擷取或設定列寬。
CurrentColumn:擷取或設定包含目前單元格的列。
CurrentItem:擷取包含目前單元格且與行綁定的資料項。
DragIndicatorStyle:擷取或設定當拖曳列頭時的樣式。
DropLocationIndicatorStyle:擷取或設定呈現列頭時的樣式。
FrozenColumnCount:擷取或設定當機列的個數。
GridLinesVisibility:擷取或設定網格線的顯示形式。
HeadersVisibility:擷取或設定行頭及列頭的顯示形式。
HorizontalGridLinesBrush:擷取或設定水準網格線的筆刷。
HorizontalScrollBarVisibility:擷取或設定水準滾動條的顯示樣式。
IsReadOnly:擷取或設定DataGrid是否為隻讀。
MaxColumnWidth:擷取或設定DataGrid的最大列寬。
MinColumnWidth:擷取或設定DataGrid的最小列寬。
RowBackground:擷取或設定用于填充行背景的筆刷。
RowDetailsTemplate:擷取或設定被用于顯示行詳細部分的内容的模闆。
RowDetailsVisibilityMode:擷取或設定一個值用以判定行詳細部分是否顯示。
RowGroupHeaderStyles:擷取呈現行分組頭部的樣式。
RowHeaderStyle:擷取或設定呈現行頭的樣式。
RowHeaderWidth:擷取或設定行頭的寬度。
RowHeight:擷取或設定每行的高度。
RowStyle:擷取或設定呈現行時的樣式。
SelectedIndex:擷取或設定目前選中部分的索引值。
SelectedItem:擷取或設定與目前被選中行綁定的資料項。
SelectedItems:擷取與目前被選中的各行綁定的資料項們的清單(List)。
SelectionMode:擷取或設定DataGrid的選取模式。
VerticalGridLinesBrush:擷取或設定垂直網格線的筆刷。
VerticalScrollBarVisibility:擷取或設定垂直滾動條的顯示樣式。
元件常用方法:
BeginEdit:使DataGrid進入編輯狀态。
CancelEdit:取消DataGrid的編輯狀态。
CollapseRowGroup:閉合DataGrid的行分組。
CommitEdit:确認DataGrid的編輯完成。
ExpandRowGroup:展開DataGrid的行分組。
GetGroupFromItem:從具體Item中得到分組。
ScrollIntoView:滾動DataGrid視圖。
元件常用事件:
BeginningEdit:發生于一個單元格或行進入編輯模式之前。
CellEditEnded:發生于一個單元格編輯已被确認或取消。
CellEditEnding:發生于一個單元格正在結束編輯時。
CurrentCellChanged:發生于一個單元格成為目前單元格時。
PreparingCellForEdit:發生于在DataGridTemplateColumn下的單元格進入編輯模式時。
SelectionChanged:發生于當SelectedItem或SelectedItems屬性值改變時。
三、wpf- DataGrid 基礎列子
<Grid>
<DataGrid x:Name="dataGrid" ItemsSource="{Binding}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Width="80" Binding="{Binding Name}"/>
<DataGridTextColumn Header="Age" Width="50" Binding="{Binding Age}"/>
<DataGridComboBoxColumn Width="80" Header="Sex" SelectedItemBinding="{Binding Sex}"
ItemsSource="{Binding Source={StaticResource sexEnum}}"/>
<DataGridHyperlinkColumn Header="Email" Width="150" Binding="{Binding Email}"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
四、wpf- DataGrid 常遇問題
2.WPF中 DataGrid 最後多出一行,一列怎麼去掉?
CanUserAddRows設定為false,不讓它做自動插入行的操作
<DataGrid AutoGenerateColumns="False" CanUserAddRows="False"
IsReadOnly="False" ></DataGrid>
3.自定義表頭(表頭帶邊框,文字居中)
<Style TargetType="DataGridColumnHeader">
<Setter Property="SnapsToDevicePixels" Value="True" />
<Setter Property="MinWidth" Value="0" />
<Setter Property="MinHeight" Value="28" />
<Setter Property="Foreground" Value="#323433" />
<Setter Property="FontSize" Value="14" />
<Setter Property="Cursor" Value="Hand" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="DataGridColumnHeader">
<Border x:Name="BackgroundBorder" BorderThickness="1,1,1,1"
BorderBrush="Wheat" Background="LightGray"
Width="Auto">
<Grid >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<ContentPresenter Margin="0,0,0,0" VerticalAlignment="Center" HorizontalAlignment="Center"/>
<Path x:Name="SortArrow" Visibility="Collapsed" Data="M0,0 L1,0 0.5,1 z" Stretch="Fill" Grid.Column="2" Width="8" Height="6" Fill="White" Margin="0,0,50,0"
VerticalAlignment="Center" RenderTransformOrigin="1,1" />
<Rectangle Width="1" Fill="#d6c79b" HorizontalAlignment="Right" Grid.ColumnSpan="1" />
<!--<TextBlock Background="Red">
<ContentPresenter></ContentPresenter></TextBlock>-->
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="Height" Value="25"/>
</Style>
四.WPF DataGrid自動生成行号
xmal頁面
<DataGrid Grid.Row="5" Grid.ColumnSpan="4" Name="alarmRecordGrid" Background="#479ECFE5" AutoGenerateColumns="False"LoadingRow="dataGrid_LoadingRow">
<DataGrid.Columns>
<DataGridTextColumn Header="所屬局" Width="100" Binding="{Binding Path=BureauName}"/>
<DataGridTextColumn Header="網元類型" Width="100" Binding="{Binding Path=NetElementTypeName}"/>
<DataGridTextColumn Header="子產品号" Width="100" Binding="{Binding Path=ModuleNo}"/>
<DataGridTextColumn Header="報警等級" Width="100" Binding="{Binding Path=AlarmLevelsName}"/>
<DataGridTextColumn Header="報警類型" Width="100" Binding="{Binding Path=AlarmTypeName}"/>
<DataGridTextColumn Header="報警名稱" Width="150" Binding="{Binding Path=AlarmName}"/>
<DataGridTextColumn Header="詳細内容" Width="*" Binding="{Binding Path=DetailedContents}"/>
<DataGridTextColumn Header="報警發生時間" Width="150" Binding="{Binding Path=GenerationTime}"/>
</DataGrid.Columns>
</DataGrid>
private void dataGrid_LoadingRow(object sender, DataGridRowEventArgs e)
{
e.Row.Header = e.Row.GetIndex() + 1;
}