WPF DevExpress中GridControl如何實現數據實時加載,並且讓滾動條自動下滑


項目開發需要實現:隨着綁定的數據增加,GridControl數據也要隨着動態增加,並且始終選中最新添加的數據行(即滾動條自動下滑)。其實有好多種實現方法,網上看到的有利用ScrollIntoView的ScrollToVerticalOffset方法等等,這里提供一個簡便方法

GridControl的此次的綁定數據源是DataTable,當然也可以改成其他數據源,大同小異;DataTable在viewModel里面定義,同時要定義一個表示當前DataTable行數的變量,再添加和刪除數據時也要隨之改變,廢話不多說了,直接上代碼吧,另外附加一些常用的TableView屬性。

 

 1 <dxg:GridControl ItemsSource="{Binding Data}" Grid.Row="0" AutoGenerateColumns="None" ShowBorder="False" SnapsToDevicePixels="True">
 2                         <dxg:GridControl.Columns>
 3                             <dxg:GridColumn Header="..." FieldName="...(和DataTable的列名對應)" Width="30" HorizontalHeaderContentAlignment="Center"/>
 4                         </dxg:GridControl.Columns>
 5                         <dxg:GridControl.View>
 6                             <dxg:TableView AllowPerPixelScrolling="True" 
 7                                 AllowScrollAnimation="false"
 8                                            NavigationStyle="Row"
 9                                            RowIndicatorContentTemplate="{StaticResource rowIndicatorContentTemplate}"
10                                            ShowFocusedRectangle="False"          
11                                            UseEvenRowBackground="True"
12                                            AllowEditing="False"
13                                            IndicatorWidth="50"
14                                            FocusedRowHandle="{Binding TotalNum, Converter={StaticResource rtc}}"
15                                            ShowGroupPanel="False"
16                                            AllowGrouping="False"
17                                            ShowVerticalLines="False"
18                                            ShowHorizontalLines="False"
19                                            ShowDataNavigator="False"
20                                            ShowIndicator="True"
21                                            AllowResizing="True"
22                                            AllowSorting="False"                                            
23                                            AllowFilterEditor="True"                                              
24                                            AllowColumnFiltering="True"
25                                            AllowMoveColumnToDropArea="False" 
26                                            AllowScrollToFocusedRow="True"
27                                            AutoWidth="True" 
28                                            IsColumnMenuEnabled="False"/>
29                         </dxg:GridControl.View>
30                     </dxg:GridControl>
注意一個重要的屬性: FocusedRowHandle,表示當前選中行handle,下面貼出其綁定的viewModel

private DataTable Data = new DataTable();
/// <summary>
        /// 綁定的數據表
        /// </summary>
        public DataTable Data
        {
            get { return Data; }
            set
            {
                Data = value;
                OnPropertyChanged(new PropertyChangedEventArgs("Data"));
            }
        }

private int totalNum;
        /// <summary>
        /// 幀數總數
        /// </summary>
        public int TotalNum
        {
            get { return totalNum; }
            set
            {
                totalNum = value;
                OnPropertyChanged(new PropertyChangedEventArgs("TotalNum"));
            }
        }
TotalNum要伴隨着DataTable的行數變化,下面是Convert,當然這一步有點多余,直接在添加或者刪除行時候再處理就OK了。
#region 表格數據增加時讓選中最后一行從而實現滾動條自動下拉
    public class RowToFocusConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            int _focusRow = (int)value;
            _focusRow--;
            return _focusRow;
        }
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
    #endregion

另外再附加一段RowIndicator的ContentTemplate,即在每行之前都顯示當前行號,便於查看

<DataTemplate x:Key="rowIndicatorContentTemplate">
            <StackPanel VerticalAlignment="Stretch"
                        HorizontalAlignment="Stretch">
                <TextBlock Text="{Binding Path=RowHandle.Value}"
                           TextAlignment="Center"
                           Foreground="LightGray"/>
            </StackPanel>
        </DataTemplate>
下面是TableView 的常用屬性:

AllowPerPixelScrolling //逐像素滾動;
AllowScrollAnimation //滾動動畫,當下拉滾動條時有動畫效果
NavigationStyle //選中方式是一行還是單元格
ShowIndicator //是否在每一行之前顯示小方塊
UseEvenRowBackground //隔行其背景顏色會有所區分
AllowScrollToFocusedRow //允許滾動到選中行
AllowResizing //允許調整尺寸
AllowSorting //允許排序
AutoWidth //允許自動調整列寬
AllowMoveColumnToDropArea //允許將一列拖到空白處進行分組
AllowGrouping //允許分組
AllowFilterEditor //允許顯示過濾盤
AllowEditing //允許編輯
ShowGroupPanel//顯示分組panel
ShowHorizontalLines   ShowVerticalLines //顯示表格中每行每列垂直和水平線
IsColumnMenuEnabled //是否關閉右鍵列菜單


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM