WPF之DataGrid用法(一)

介紹數據表格DataGrid的基礎用法。

DataGrid可用AutoGenerateColumns屬性控制列的生成。Column包含DataGridTextColumn、DataGridCheckBoxColumn、DataGridComboBoxColumn、DataGridHyperlinkColumn、DataGridTemplateColumn等5中格式。


1.DataGridTextColumn

DataGridTextColumn最常用,不再做介紹。

2.DataGridCheckBoxColumn

DataGridCheckBoxColumn是勾選框數據列。效果如下:

主要XAML代碼:
<DataGridCheckBoxColumn Binding="{Binding Selected,NotifyOnSourceUpdated=True,UpdateSourceTrigger=PropertyChanged}" 
						HeaderStyle="{StaticResource DataGridColumnHeaderStyle1}">
	<DataGridCheckBoxColumn.Header>
		<CheckBox IsChecked="{Binding IsAllSelected,RelativeSource={RelativeSource AncestorType={x:Type local:DataGridCheckBoxColumn}}}"/>
	</DataGridCheckBoxColumn.Header>
</DataGridCheckBoxColumn>
其中列頭選擇框居中需要修改HeaderStyle屬性,修改ContentPresenter的HorizontalAlignment="Center"即可。修改樣式通常使用Blend完成,這裏就不在詳細介紹。
另外,通過設置NotifyOnSourceUpdated=True,當數據選擇框選擇更改時來觸發消息,而後用DataGrid的SourceUpdated事件來捕獲,在事件中處理列頭選擇框的狀態。

3.DataGridComboBoxColumn

若要填充下拉列表,請首先使用下列選項之一設置 ComboBox 的 ItemsSource 屬性。
  • 靜態資源。 
  • x:Static 代碼實體。
  • ComboBoxItem 類型的內聯集合。
實現效果如下:

如需使用非靜態資源,則需要使用DataGridComboBoxColumn的EditingElementStyle樣式修改編輯樣式,通過ElementStyle修改正常顯示(非編輯狀態)樣式。
主要XAML代碼如下:
<DataGrid x:Name="grd" ItemsSource="{Binding StuList3}" AutoGenerateColumns="False">
	<DataGrid.Columns>
		<DataGridTextColumn Binding="{Binding No}" Header="學號"/>
		<DataGridTextColumn Binding="{Binding Name}" Header="姓名"/>
		<!--使用普通List集合-->
		<DataGridComboBoxColumn x:Name="cmb" Header="性別">
			<DataGridComboBoxColumn.EditingElementStyle>
				<Style TargetType="ComboBox">
					<Setter Property="ItemsSource" Value="{Binding Path=DataContext.SexList,ElementName=grd}" />
					<Setter Property="DisplayMemberPath" Value="Name" />
					<Setter Property="SelectedValuePath" Value="Name" />
					<Setter Property="SelectedValue" Value="{Binding Sex,UpdateSourceTrigger=PropertyChanged}" />
				</Style>
			</DataGridComboBoxColumn.EditingElementStyle>
			<DataGridComboBoxColumn.ElementStyle>
				<Style TargetType="ComboBox">
					<Setter Property="ItemsSource" Value="{Binding Path=DataContext.SexList,ElementName=grd}" />
					<Setter Property="DisplayMemberPath" Value="Name" />
					<Setter Property="SelectedValuePath" Value="Name" />
					<Setter Property="SelectedValue" Value="{Binding Sex}" />
				</Style>
			</DataGridComboBoxColumn.ElementStyle>
		</DataGridComboBoxColumn>
		<!--使用靜態資源-->
		<DataGridComboBoxColumn Header="性別(靜態資源)" ItemsSource="{Binding Source={StaticResource myEnum}}"
								TextBinding="{Binding Sex}"
								SelectedItemBinding="{Binding Sex,UpdateSourceTrigger=PropertyChanged}">
		</DataGridComboBoxColumn>
		<!--使用x:Static擴展標記-->
		<DataGridComboBoxColumn Header="性別(x:Static)" ItemsSource="{x:Static local:ViewModel.SexList2}"
								TextBinding="{Binding Sex}"
								SelectedItemBinding="{Binding Sex,UpdateSourceTrigger=PropertyChanged}">
		</DataGridComboBoxColumn>
		<!--使用內聯集合-->
		<DataGridComboBoxColumn Header="性別(內聯集合)"
								TextBinding="{Binding Sex}"
								SelectedItemBinding="{Binding Sex,UpdateSourceTrigger=PropertyChanged}">
			<DataGridComboBoxColumn.ItemsSource>
				<col:ArrayList>
					<sys:String>男</sys:String>
					<sys:String>女</sys:String>
				</col:ArrayList>                       
			</DataGridComboBoxColumn.ItemsSource>
		</DataGridComboBoxColumn>
	</DataGrid.Columns>
</DataGrid>


4.DataGridHyperlinkColumn

使用 DataGridHyperlinkColumn 來顯示包含 Uri 的數據,如 HTTP 地址或電子郵件地址。只有在 Hyperlink 的直接或間接父級是導航主機時,纔會發生 Hyperlink 導航。 導航主機的例子包括 NavigationWindow、 Frame、或任何可以承載 XBAPs(如 Microsoft Internet Explorer 6 或更高版本以及 Firefox 2.0 或更高版本)的瀏覽器。
實現效果如下:

主要XAML代碼:
<DataGridHyperlinkColumn Binding="{Binding Http}" ContentBinding="{Binding Name}" Header="網址"/>

5.DataGridTemplateColumn

藉助於 DataGridTemplateColumn 類型,可以通過指定用於顯示和編輯值的單元格模板來創建您自己的列類型。
DataGridTemplateColumn可實現以上任何功能,包括checkbox,combobox等。
現實現如下效果:

通過修改顯示模板和編輯模板來實現功能,主要XMAL代碼如下:
<!--顯示模板-->
<DataTemplate x:Key="DateTemplate" >
	<StackPanel Width="60" Height="30">
		<Border Background="LightBlue" BorderBrush="Black" BorderThickness="1,1,1,0">
			<TextBlock Text="{Binding Birth, StringFormat={}{0:MMM d}}" FontSize="10" HorizontalAlignment="Center" />
		</Border>
		<Border Background="White" BorderBrush="Black" BorderThickness="1">
			<TextBlock Text="{Binding Birth, StringFormat={}{0:yyyy}}" FontSize="10" FontWeight="Bold" HorizontalAlignment="Center" />
		</Border>
	</StackPanel>
</DataTemplate>
<!--編輯模板-->
<DataTemplate x:Key="EditingDateTemplate">
	<DatePicker SelectedDate="{Binding Birth}"  />
</DataTemplate>




作者:FoolRabbit
出處:http://blog.csdn.net/rabbitsoft_1987
歡迎任何形式的轉載,未經作者同意,請保留此段聲明!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章