零基礎學通Silverlight4(6):DataGrid控件

控件是對數據和方法的封裝。控件能夠有本身的屬性、方法和事件。屬性是控件數據的簡單訪問者,方法則是控件的一些簡單而可見的功能,事件是能夠被控件識別的操做。Silverlight中,控件的特性和控件顯示方式分開,控件在用戶界面上的樣子是由控件模板決定,Silverlight爲每一個控件提供了默認的控件模板和相應的特性,用戶也可用本身的控件模板來替換,讓它成爲有個性化的控件,如過去方形的按扭,能夠換成圓的或橢圓的,或者任意圖片等,但按扭的基本屬性沒有改變。
全部控件由基類System.Windows.Control類派生而來,其命名空間是System.Windows.ControlsSystem.Windows.Controls命名空間中包含的某些控件用於Silverlight運行時,其它控件用於Silverlight SDK
現對Silverlight 控件按照常規功能進行分類,主要有:
     按鈕/命令控件,如:ButtonHyperlinkButtonRepeatButton
     日期顯示和選擇,如:CalendarDatePicker
     信息顯示:TextBlockProgressBarvRichTextBox
◎ 文本顯示和編輯:AutoCompleteBoxPasswordBoxTextBoxRichTextBox
◎ 數據顯示 DataGridDataPagerTreeView
     圖形和視頻顯示:ImageMultiScaleImageMediaElementInkPresenter
     對話框和窗口:OpenFileDialogSaveFileDialogChildWindowPopup
     導航:FramePage
     用戶幫助: DescriptionViewerLabelToolTipValidationSummary
◎ 佈局和元素分組 BorderCanvasContentControlGrid GridSplitterStackPanel ViewboxVirtualizingStackPanelScrollBarScrollViewerTabControl
     選擇控件,如:CheckBoxComboBoxListBoxRadioButtonSlider
如安控件的派生關係分,有:面板控件、內容控件、列表控件等。
DataGrid 控件提供一種用戶喜好的、靈活的方式來以表格的形式顯示數據,用戶可根據本身的需求來定製列的模板,內置列類型包括文本框列、複選框列和模板列,位於命名空間 System.Windows.Controls 下,在 System.Windows.Controls 程序集中,該程序集並不包含在 Silverlight 運行庫中,所以需添加對 System.Windows.Controls.Data.Dll 的引用,在 XAML 界面的根標記 UserControl 聲明以下:
xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"
實際操做時,如從工具箱中將 DataGrid 控件拖放至 XAML 界面中時,會自動添加上面的設置。
DataGrid 控件重要屬性有:
IsReadOnly :能夠直接編輯項。爲了確保正確地提交和取消這些編輯。
IsValid :支持單元格級別的屬性驗證和行級別的對象驗證。若是在屬性 setter 中遇到驗證異常,則單元格編輯控件將顯示其錯誤狀態。 DataGridCell..::.IsValid DataGridRow..::.IsValid DataGrid..::.IsValid 屬性都設置爲 false DataGrid 將不會退出單元格編輯模式,直到驗證錯誤得以解決。
IPagedCollectionView :對數據進行分頁。
PagedCollectionView :實現數據源提供分組、排序和分頁功能。
ItemsSource :數據網格中的每一行均綁定到數據源中的一個對象,而數據網格中的每一列均綁定到該數據對象的一個屬性。當向源數據中添加項或從源數據中移除項時,爲了使 DataGrid 用戶界面可以自動更新, DataGrid 必須綁定到實現 INotifyCollectionChanged 的集合,例如 ObservableCollection<(Of <(T>)>) 。爲了自動反映屬性更改,源集合中的對象必須實現 INotifyPropertyChanged 接口。
AutoGenerateColumns :屬性設置爲 false ,能夠阻止自動生成列。若是要顯式建立和配置全部列,則這一點頗有用。此外,還可讓數據網格生成列,但處理 AutoGeneratingColumn 事件以便在建立後對列進行自定義。若要從新排列列的顯示順序,能夠針對各個列設置 DisplayIndex 屬性。
CanUserReorderColumns:屬性設置爲true時,能夠拖動該列改變該列的順序,不然不能拖動。
CanUserResizeColumns:屬性設置爲true時,用戶能夠用鼠標調整列的寬度,不然列的寬度不能被調整。

範例示範使用RowDetailTemplate

    13.1-6 Ch13_Exam1_4 的運行畫面,單擊某一行後,出現詳細信息。
 
13.1-6
XAML 標記以下,已添加註解。
<UserControl
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
<!--增長的命名空間支持 -->
    xmlns:myheader="clr-namespace:System.Windows.Controls.Primitives;assembly=System.Windows.Controls.Data"
    mc:Ignorable="d"
xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"
x:Class="SilverlightApplication74.MainPage"
    d:DesignWidth="640" d:DesignHeight="580"
     xmlns:local="clr-namespace:SilverlightApplication74">
  <Grid x:Name="LayoutRoot">
         <StackPanel Margin="10,0,8,18">
                <TextBlock Height="51" Margin="179,0,299,0" Text="熱門新車銷量表" TextWrapping="Wrap" FontSize="32" Foreground="#FFE90D0D"/>
// 設置RowDetailsVisibilityMode屬性
<data:DataGrid x:Name="gridStudent" Margin="10,10,0,0" AutoGenerateColumns="False" Width="604" Height="488" HorizontalAlignment="Left" RowDetailsVisibilityMode="VisibleWhenSelected" >
//定義詳細數據區域
<data:DataGrid.RowDetailsTemplate>
                         <DataTemplate>
                                <Border>
<Border Margin="10" Padding="10" BorderBrush="SteelBlue" BorderThickness="4" CornerRadius="4">
                  <TextBlock Text="{Binding Description}" TextWrapping="Wrap" FontSize="14"></TextBlock>
                                       </Border>
                                </Border>
                         </DataTemplate>
</data:DataGrid.RowDetailsTemplate>
// 定義ColumnHeaderStyle列標題樣式
                  <data:DataGrid.ColumnHeaderStyle>
                      <Style TargetType="myheader:DataGridColumnHeader">
                             <Setter Property="FontSize" Value="18" />
                                <Setter Property="Foreground" Value="Red" />
                         </Style>
                  </data:DataGrid.ColumnHeaderStyle>         
                  <data:DataGrid.Columns >
                              <data:DataGridTextColumn Header="車名"
                                     FontSize="16"
                                     Width="100"
                                     Binding="{Binding Name}" >                     
                         </data:DataGridTextColumn>                                                
                         <data:DataGridTextColumn Header="類型"
                                     FontSize="16"
                                     Width="100"
                                     Binding="{Binding Type}" >                      
                         </data:DataGridTextColumn>                                         
                              <data:DataGridTextColumn Header="銷量"
                                     FontSize="16"
                                     Width="150"
                                     Binding="{Binding Total,Mode=TwoWay}">             
                                <data:DataGridTextColumn.ElementStyle>
                                   <Style TargetType="TextBlock">
                                      <Setter Property="TextWrapping" Value="Wrap" />
                                   </Style>
                                </data:DataGridTextColumn.ElementStyle>                      
                                <data:DataGridTextColumn.EditingElementStyle>
                                   <Style TargetType="TextBox">
                                      <Setter Property="FontWeight" Value="Bold" />
                                         <Setter Property="Foreground" Value="Red" />
                                   </Style>
                                </data:DataGridTextColumn.EditingElementStyle>
                         </data:DataGridTextColumn>                    
                              <data:DataGridTemplateColumn Header="圖片" >             
                                     <data:DataGridTemplateColumn.CellTemplate>
                                            <DataTemplate>
  <Image Stretch="UniformToFill" Source ="{Binding Img}" Width="150"/>
                                            </DataTemplate>
                                     </data:DataGridTemplateColumn.CellTemplate>         
                                     <data:DataGridTemplateColumn.CellEditingTemplate>
                                            <DataTemplate>
                              <TextBox Text="{Binding Car, Mode=TwoWay}" />
                                            </DataTemplate>
    </data:DataGridTemplateColumn.CellEditingTemplate>
                </data:DataGridTemplateColumn>                 
    </data:DataGrid.Columns>
         </data:DataGrid>
         </StackPanel>
  </Grid>
</UserControl>
     主要代碼以下:
   public void LoadData()
        {
            car = new Car[] {
                 new Car{
                                Name="新明銳",
                                Total =8500,
                                Type="小型車",
                                Img=GetPath("CarPhoto/mingru.jpg"),
Description="斯柯達品牌秉承德國大衆集團的先進技術,其產品特色是智慧和品質…………….",
                                },
               new Car{
                    Name="高爾夫6",
                             Total =15500,
                             Type="豪華車",
                             Img=GetPath("CarPhoto/golf.jpg"),
                          Description="高爾夫不只追求外觀和實用性完美結合,並且在產品品質、內飾及溫馨性裝備上也絕不妥協地追求完美…………….."
                          },
                new Car{
                                 Name="科魯茲",
                                Total =11000,
                                Type="中型車",
                                Img=GetPath("CarPhoto/kouluz.jpg"),
                          Description="科魯茲的外形給人一種鋒利運動的感受,尤爲是銳角的前大燈更強化了……………."
                         },
                new Car{
                                Name="福克斯兩廂",
                                Total =12800,
                                Type="緊湊型車",
                                Img=GetPath("CarPhoto/fukes.jpg"),
                          Description="福克斯兩廂車頭採用的X焦點設計,正是福特汽車車頭設計的進化成果……………."
                         },
                new Car{
                                Name="速騰1.4T",Total =10600,
                                Type="中型車",
                                Img=GetPath("CarPhoto/suteng.jpg"),
                          Description="速騰是一汽大衆於200649日投放中國市場的一款新車型,其英文名稱爲…………….",
                         }
            };
        }
//讀取圖片的絕對路徑
           string GetPath(string path)
           {
                  string Uri;
    string absoUri= System.Windows.Application.Current.Host.Source.AbsoluteUri;
                  if (absoUri.IndexOf("ClientBin") > 0)
               Uri=absoUri.Substring(0, absoUri.IndexOf("ClientBin")) + path;
            else
               Uri=absoUri.Substring(0, absoUri.LastIndexOf("/") + 1) + path;
                  return Uri;
           }
    }
//定義汽車類
    public class Car
    {
        public string Name
        { set;get;}
        public int Total
        { set;get;}
        public string Type
        { set;get; }
           public string Description
        { set;get; }
           public string Img
        { set;get;}
 }
更詳細內容及源代碼下載:
http://www.amazon.cn/mn/detailApp/ref=sr_1_1?_encoding=UTF8&s=books&qid=1287058088&asin=B0043RT7I2&sr=8-1
相關文章
相關標籤/搜索