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