zoukankan      html  css  js  c++  java
  • 【WPF】GridControl的使用

    一、前言

           在WPF中我们常常使用DataGrid来显示数据,在Dev中也有一个类似的控件—GridControl。

    二、范例

     <dxg:GridControl  
          Grid.Row="1"
          ItemsSource="{Binding SelectedSummaryInfos}"
          Margin ="5" >
                <dxg:GridControl.View >
                    <dxg:TableView Name="SummaryTable"  AutoWidth="True" AllowMoveColumnToDropArea="False"/>
                </dxg:GridControl.View>
                <dxg:GridControl.Columns>
                    <dxg:GridColumn   Header="楼层" Binding="{Binding FloorName}" ReadOnly="True"/>
                    <dxg:GridColumn   Header="类型" Binding="{Binding QuantificationType}" ReadOnly="True"/>
                    <dxg:GridColumn   Header="级别" Binding="{Binding RType}">
                        <dxg:GridColumn.CellTemplate>
                            <DataTemplate>
                                <TextBlock Text="{Binding RowData.Row.RType}" FontFamily="SJQY"></TextBlock>
                            </DataTemplate>
                        </dxg:GridColumn.CellTemplate>
                    </dxg:GridColumn>
                    <dxg:GridColumn   Header="直径(mm)" Binding="{Binding Diameter}" ReadOnly="True" />
                    <dxg:GridColumn   Header="总长(m)" Binding="{Binding Quantity,StringFormat={}{0:###.###}}" ReadOnly="True"/>
                    <dxg:GridColumn   Header="总重(t)" Binding="{Binding Weight,StringFormat={}{0:###.###}}" ReadOnly="True" />
                </dxg:GridControl.Columns>
     </dxg:GridControl>

    通过以上代码范例,我们可以看到以下几个特点:

    1. 当GridContol显示时默认有一个拖拽框用以将字段拖入其中进行分组排序,这是一个很强大的功能,如果你不需要这个功能,可以ShowGroupPanel=“false”。

    2. AllowMoveColumnToDropArea="False"是不让用户随意拖拽某一列至垃圾区。

    3. GridControl通过设置TableView的AutoWidth=“Auto”来使Columns占满整个Grid,如果不设置的话有时候你会发现展现出的Grid会多出一列!

    4. GridControl通过TableView的Name来进行某些操作,如导出成Excel:

    var projectName = "Project";
    if (projectNameItem != null)
    {
          projectName = projectNameItem.Value;
    }
    
    var dlg = QSContainer.Resolve<ISaveFileDialogService>(); //IOC
    dlg.Filter = "Excel file(*.xls)|*.xls";           
    dlg.DefaultFileName = $"{projectName}_{"Summary.xls"}";                      
    if (!dlg.ShowDialog())
    {
         return;
    }
    
         var filePath = dlg.GetFullFileName();           
         SummaryTable.ExportToXls(filePath);  // Name !
    try
    {
         Process.Start(filePath);
    }
    finally { }


    5. dxg:GridColumn不能直接包含FontFamily等在DataGridTextColumn中常见的属性,需要重写Template,重写的时候有两个地方需要绑定,Template绑定的是RowData.Row.XX:

    <dxg:GridColumn   Header="级别" Binding="{Binding RType}">    //第一处绑定
         <dxg:GridColumn.CellTemplate>
               <DataTemplate>
                       <TextBlock Text="{Binding RowData.Row.RType}" FontFamily="MS"></TextBlock>   //第二处绑定,这里是RowData.Row.XX
               </DataTemplate>
         </dxg:GridColumn.CellTemplate>
    </dxg:GridColumn>

    6. 上面说到GridControl有一个的强大的功能,GroupPanel。你可以将列标题拖入这个GroupPanel从而达到排序显示功能。如果我想把GroupPanel里的列恢复原样该怎么办?怎么通过代码把列给拖回原来的列表位置?这里有个简单的方法

    foreach(var item in gc.Columns)
    {
         item.GroupIndex = -1;
    }

     7. 这个GroupPanel显示的时候会有一行英文提示:gridcontrol Drag a column header here to group by that column;如果想要用其它文字或者语言表述的话,可以:

     <dxg:TableView Name="tableView1" ShowTotalSummary="True">
           <dxg:TableView.RuntimeLocalizationStrings>
                 <dxg:GridRuntimeStringCollection>
                       <dxg:RuntimeStringIdInfo Id="GridGroupPanelText" Value="Your words"/>
    </dxg:GridRuntimeStringCollection> </dxg:TableView.RuntimeLocalizationStrings> </dxg:TableView>

    三、小结

     本文大致介绍了Dev的GridControl的基本功能,其实GridControl还有很多有用的设置可以去探索一下,我这里就做个抛砖引玉吧。

  • 相关阅读:
    DataGridView如何获取某个数据
    扩展方法
    base和this关键字
    装箱和拆箱
    var,object和dynamic
    const和readonly
    react native回调函数刷新页面
    react native打包android,android9.0以上版本http请求不了怎么办?
    react native中android app怎样打包发布
    React Native 实现页面返回监听
  • 原文地址:https://www.cnblogs.com/lovecsharp094/p/6413724.html
Copyright © 2011-2022 走看看