WPF 项目开发入门(十一)DevExpress 插件 Grid表格应用

WPF 项目开发入门(一) 安装运行
WPF 项目开发入门(二) WPF 页面布局
WPF 项目开发入门(三)WPF 窗体与页面
WPF 项目开发入门(四) MVVM 模式 与 TreeView树组件
WPF 项目开发入门(五)ListView列表组件 与 Expander组件
WPF 项目开发入门(六)DataGrid组件
WPF 项目开发入门(七) From表单组件
WPF 项目开发入门(八)数据库驱动配置与数据库操作
WPF 项目开发入门(九)数据库连接 NHibernate使用
WPF 项目开发入门(十)DevExpress 插件+NHibernate登录
WPF 项目开发入门(十一)DevExpress 插件 Grid表格应用

8.1 Grid表格带横拉线

表格刷新方法RefreshData()。

  • ShowGroupPanel 属性设置表个内容宽度超出表格,出现横拉线。
  • AllowEditing 表格内容是否可以编辑。
  • ShowLoadingPanel 数据加载面板。
<dxg:GridControl  Grid.Row="1" x:Name="deptplgird" Height="420">
    <dxg:GridControl.View>
        <dxg:TableView 
                       AllowEditing="False"-----不可编辑
                       ShowGroupPanel="False"/>-----横拉线设置
        <dxg:GridColumn FieldName="a1" IsSmart="True"  Header="设备名称" />
</dxg:GridControl>

在这里插入图片描述

8.2 Grid表格多层列头

Grid表格列头设置多层同时行也和列头一样设置为多行内容。

dxg:GridControl.Bands 中设置 列头dxg:GridControlBand 元素,列头dxg:GridControlBand 元素中的子元素为dxg:GridColumn行元内容。

  • OverlayHeaderByChildren:OverlayHeaderByChildren=“True” 列头显示子行内容。
  • HorizontalHeaderContentAlignment:字体位置。
<dxg:GridControl.Bands>
    <dxg:GridControlBand  
          OverlayHeaderByChildren="True">
        <dxg:GridColumn FieldName="a1" 
                        Header="设备名称"  
                        Width="150" 
                        HorizontalHeaderContentAlignment="Center"/>
    </dxg:GridControlBand>
    <dxg:GridControlBand Header="设备基础信息" 
                         HorizontalHeaderContentAlignment="Center">
        <dxg:GridColumn FieldName="a2" Header="设备编号" />
        <dxg:GridColumn FieldName="a3" Header="设备类型" />
        <dxg:GridColumn FieldName="a3" Header="负责人" />
    </dxg:GridControlBand>
    <dxg:GridControlBand Header="检修项目" 
                         HorizontalHeaderContentAlignment="Center">
        <dxg:GridColumn FieldName="a2" Header="定检" />
        <dxg:GridColumn FieldName="a3" Header="巡检" />
        <dxg:GridColumn FieldName="a3" Header="岗检" />
    </dxg:GridControlBand>
</dxg:GridControl.Bands>

在这里插入图片描述

8.3 Grid行数据加格式转换器
  • IValueConverter : 格式转换需要继承接口IValueConverter类。
<UserControl 
        xmlns:ctrls="clr-namespace:JMDJ.db.uilt" -----引入命名规则
        mc:Ignorable="d">
<UserControl.Resources>
//ALLCheckConv  是格式转换器类名称 x:Key="allchek"对象引用名称
     <ctrls:ALLCheckConv x:Key="allchek" />
</UserControl.Resources>
//Converter={StaticResource allchek} 格式转换器引入
//ConverterParameter参数名称
<dxe:CheckEdit 
    IsChecked="{Binding Value,
    Converter={StaticResource allchek},            
    ConverterParameter=1}" />  

业务类

复选组件
<dxe:CheckEdit 
    IsChecked="{Binding Value,----------------------|
    Converter={StaticResource allchek},             |
    ConverterParameter=1}" />      -----------------|--|
                                                    |  |
public class ALLCheckConv: IValueConverter{         |  |
    public object Convert(object value,  <----------|  |
                          Type targetType,             |
                          object parameter,  <---------|
                          CultureInfo culture) {
        if (value == null || parameter == null){
                return false;
        }
        if (value.ToString().Equals(
            parameter.ToString())){
                return true;
        }
        return false;
    }
    // 目标数据格式转换为原数据格式(正常->1)
    // 当您更改控件的值时,再次触发时调用
    public object ConvertBack(object value, 
                              Type targetType,
                              object parameter,
                              CultureInfo culture){
        if (value == null || parameter == null){
                return null;}
        if ((bool)value){
                return parameter.ToString();
        }
        return null;
    }
}

在这里插入图片描述
Grid组件Row中应用

dxg:TableView 为空AllowEditing="False"行不可编辑。

dxg:GridColumn 设置AllowEditing="True"列可以编辑。

dxg:TableView 使用事件编辑CellValueChanged行数据。

<dxg:GridColumn FieldName="JP6" 
                Header="振动" 
                Width="50" 
                HorizontalHeaderContentAlignment="Center"  
                AllowEditing="True" >------设置列可编辑
    <dxg:GridColumn.CellTemplate >
        <DataTemplate >
            <StackPanel Orientation="Horizontal" 
                        HorizontalAlignment="Center" >
       ---PART_Editor  定义这个名字标识组件数据与Grid中row数据同步
       <dxe:CheckEdit Name="PART_Editor"
        EditValue="{Binding Value,
                   Converter={StaticResource allchek},
                   ConverterParameter=1}" />
            </StackPanel>
        </DataTemplate>
    </dxg:GridColumn.CellTemplate>
</dxg:GridColumn>
<!----------   行设置   ------------->
<dxg:GridControl.View>
    <dxg:TableView 
                   AllowEditing="False"------行不可编辑
                   ShowGroupPanel="False" 
                   CellValueChanged="Up_CellValueChanged"/>
</dxg:GridControl.View>
8.4 Grid背景色

在CellTemplate摸板中设置Grid单元格的背景颜色

<dxg:GridColumn FieldName="JP15" 
                Header="检测方式"  
                HorizontalHeaderContentAlignment="Center">
 <dxg:GridColumn.CellTemplate>
     <DataTemplate>
         <Border Background="red"/>
     </DataTemplate>
    </dxg:GridColumn.CellTemplate>
</dxg:GridColumn>

GridColumn.CellStyle 单元格样式下设置背景色

  • dxg:LightweightCellEditor 必须是优化模式
<dxg:GridColumn FieldName="JP15"
                Header="检测方式" 
                HorizontalHeaderContentAlignment="Center" 
                AllowEditing="True">
    <dxg:GridColumn.CellStyle>
        <Style TargetType="dxg:LightweightCellEditor" >
            <Style.Triggers>
                <Trigger Property="SelectionState" Value="None">
                    <Setter Property="Background" Value="#FFE6F2FA" />
                </Trigger>
            </Style.Triggers>
        </Style>
    </dxg:GridColumn.CellStyle>
</dxg:GridColumn
8.5 Grid编辑单元格验证Validate

dxg:GridColumn Grid组件中的编辑单元格验证方法需要定义一个验证事件。注意Grid组件验证功能是在验证事件中完成。

<dxg:GridColumn FieldName="JP12" Header="测点数量" 
                Width="100" 
HorizontalHeaderContentAlignment="Center" 
                AllowEditing="True"
                Validate="GridColumn_Validate">-------设置单元验证事件
    
---------------------    验证方法     -----------------------
private void GridColumn_Validate(object sender,
    DevExpress.Xpf.Grid.GridCellValidationEventArgs e){
    string v= (string)e.Value;//获得单元数据
    if (e.Column.FieldName == "JP11"){//获得列名称
        if (string.IsNullOrEmpty(v)){
                e.ErrorContent = "不能为空";
                e.IsValid = false;//设置错误
                MessageBox.Show("不能为空");
         }
    }
}

在这里插入图片描述

8.6 焦点设置
<dxg:GridControl.View >
    <dxg:TableView AutoWidth="True" 
                   x:Name="flowview"------设置摸板名称
                   ShowGroupPanel="False"/>
</dxg:GridControl>
------------------ cs 业务程序中  --------------------
flowview.FocusedRowHandle =2  设置焦点位置
8.7 列序号设置

摸板中使用的是DXBinding 绑定语法。

<UserControl.Resources>
<DataTemplate x:Key="rowIndTemplate">
        <StackPanel VerticalAlignment="Stretch"
                    HorizontalAlignment="Stretch">
            <TextBlock Text="{DXBinding Expr='RowHandle.Value + 1 '}"
                       TextAlignment="Center"
                       Foreground="Gray"/>
        </StackPanel>
    </DataTemplate>    
</UserControl.Resources>
 <dxg:GridControl.View>
     <dxg:TableView 
      RowIndicatorContentTemplate="{StaticResource rowIndTemplate}"/>
  </dxg:GridControl.View>

9 打印

public partial class JM_AR_PlanPring : ThemedWindow{
    public JM_AR_PlanPring(){
            InitializeComponent();
    }
    JmdTaskFlowComDao dao = new JmdTaskFlowComDao();
    private List<DetpUserFlowPojo> Data;
    private void Window_Loaded_init(object sender, RoutedEventArgs e) {
        Data = dao.getDeptUserFlowList(null);
        SimpleLink link = new SimpleLink();
        link.ReportHeaderTemplate = (DataTemplate)Resources["HeaderTemplate"];
        link.DetailTemplate = (DataTemplate)Resources["ProductsTemplate"];
        link.DetailCount = Data.Count;
        preview.DocumentSource = link;
        link.CreateDetail += link_CreateDetail;
        link.CreateDocument(true);
    }
    void link_CreateDetail(object sender, CreateAreaEventArgs e){
        e.Data = Data[e.DetailIndex];
    }
}

9 其他与资料

9.1 文本IO流导入

using (StreamReader sr = new StreamReader("d:/zht.csv"))
{
    string line;
    // 从文件读取并显示行,直到文件的末尾 
    while ((line = sr.ReadLine()) != null){
        string[] ps=line.Split(',');
        Response.Write("<h5>" + ps[1].Substring(1, ps[1].Length-1) + "<h5>");
    }
}

9.2 日期字符处理

//获取日期+时间
DateTime.Now.ToString();            // 2008-9-4 20:02:10
DateTime.Now.ToLocalTime().ToString();        // 2008-9-4 20:12:12

//获取日期
DateTime.Now.ToLongDateString().ToString();    // 2008年9月4日
DateTime.Now.ToShortDateString().ToString();    // 2008-9-4
DateTime.Now.ToString("yyyy-MM-dd");        // 2008-09-04
DateTime.Now.Date.ToString();            // 2008-9-4 0:00:00

//获取时间
DateTime.Now.ToLongTimeString().ToString();   // 20:16:16
DateTime.Now.ToShortTimeString().ToString();   // 20:16
DateTime.Now.ToString("hh:mm:ss");        // 08:05:57
DateTime.Now.TimeOfDay.ToString();        // 20:33:50.7187500

//其他
DateTime.ToFileTime().ToString();       // 128650040212500000
DateTime.Now.ToFileTimeUtc().ToString();   // 128650040772968750
DateTime.Now.ToOADate().ToString();       // 39695.8461709606
DateTime.Now.ToUniversalTime().ToString();   // 2008-9-4 12:19:14

DateTime.Now.Year.ToString();         获取年份  // 2008
DateTime.Now.Month.ToString();      获取月份   // 9
DateTime.Now.DayOfWeek.ToString(); 获取星期   // Thursday
DateTime.Now.DayOfYear.ToString(); 获取第几天   // 248
DateTime.Now.Hour.ToString();          获取小时   // 20
DateTime.Now.Minute.ToString();     获取分钟   // 31
DateTime.Now.Second.ToString();     获取秒数   // 45
    
//n为一个数,可以数整数,也可以事小数
dt.AddYears(n).ToString();   //时间加n年
dt.AddDays(n).ToString();   //加n天
dt.AddHours(n).ToString();   //加n小时
dt.AddMonths(n).ToString();   //加n个月
dt.AddSeconds(n).ToString();   //加n秒
dt.AddMinutes(n).ToString();   //加n分

9.3 字符串

1public static int Compare( string strA, string strB ) 比较两个指定的 string 对象,并返回一个表示它们在排列顺序中相对位置的整数。该方法区分大小写。
2public static int Compare( string strA, string strB, bool ignoreCase ) 比较两个指定的 string 对象,并返回一个表示它们在排列顺序中相对位置的整数。但是,如果布尔参数为真时,该方法不区分大小写。
3public static string Concat( string str0, string str1 ) 连接两个 string 对象。
4public static string Concat( string str0, string str1, string str2 ) 连接三个 string 对象。
5public static string Concat( string str0, string str1, string str2, string str3 ) 连接四个 string 对象。
6public bool Contains( string value ) 返回一个表示指定 string 对象是否出现在字符串中的值。
7public static string Copy( string str ) 创建一个与指定字符串具有相同值的新的 String 对象。
8public void CopyTo( int sourceIndex, char[] destination, int destinationIndex, int count ) 从 string 对象的指定位置开始复制指定数量的字符到 Unicode 字符数组中的指定位置。
9public bool EndsWith( string value ) 判断 string 对象的结尾是否匹配指定的字符串。
10public bool Equals( string value ) 判断当前的 string 对象是否与指定的 string 对象具有相同的值。
11public static bool Equals( string a, string b ) 判断两个指定的 string 对象是否具有相同的值。
12public static string Format( string format, Object arg0 ) 把指定字符串中一个或多个格式项替换为指定对象的字符串表示形式。
13public int IndexOf( char value ) 返回指定 Unicode 字符在当前字符串中第一次出现的索引,索引从 0 开始。
14public int IndexOf( string value ) 返回指定字符串在该实例中第一次出现的索引,索引从 0 开始。
15public int IndexOf( char value, int startIndex ) 返回指定 Unicode 字符从该字符串中指定字符位置开始搜索第一次出现的索引,索引从 0 开始。
16public int IndexOf( string value, int startIndex ) 返回指定字符串从该实例中指定字符位置开始搜索第一次出现的索引,索引从 0 开始。
17public int IndexOfAny( char[] anyOf ) 返回某一个指定的 Unicode 字符数组中任意字符在该实例中第一次出现的索引,索引从 0 开始。
18public int IndexOfAny( char[] anyOf, int startIndex ) 返回某一个指定的 Unicode 字符数组中任意字符从该实例中指定字符位置开始搜索第一次出现的索引,索引从 0 开始。
19public string Insert( int startIndex, string value ) 返回一个新的字符串,其中,指定的字符串被插入在当前 string 对象的指定索引位置。
20public static bool IsNullOrEmpty( string value ) 指示指定的字符串是否为 null 或者是否为一个空的字符串。
21public static string Join( string separator, string[] value ) 连接一个字符串数组中的所有元素,使用指定的分隔符分隔每个元素。
22public static string Join( string separator, string[] value, int startIndex, int count ) 连接一个字符串数组中的指定位置开始的指定元素,使用指定的分隔符分隔每个元素。
23public int LastIndexOf( char value ) 返回指定 Unicode 字符在当前 string 对象中最后一次出现的索引位置,索引从 0 开始。
24public int LastIndexOf( string value ) 返回指定字符串在当前 string 对象中最后一次出现的索引位置,索引从 0 开始。
25public string Remove( int startIndex ) 移除当前实例中的所有字符,从指定位置开始,一直到最后一个位置为止,并返回字符串。
26public string Remove( int startIndex, int count ) 从当前字符串的指定位置开始移除指定数量的字符,并返回字符串。
27public string Replace( char oldChar, char newChar ) 把当前 string 对象中,所有指定的 Unicode 字符替换为另一个指定的 Unicode 字符,并返回新的字符串。
28public string Replace( string oldValue, string newValue ) 把当前 string 对象中,所有指定的字符串替换为另一个指定的字符串,并返回新的字符串。
29public string[] Split( params char[] separator ) 返回一个字符串数组,包含当前的 string 对象中的子字符串,子字符串是使用指定的 Unicode 字符数组中的元素进行分隔的。
30public string[] Split( char[] separator, int count ) 返回一个字符串数组,包含当前的 string 对象中的子字符串,子字符串是使用指定的 Unicode 字符数组中的元素进行分隔的。int 参数指定要返回的子字符串的最大数目。
31public bool StartsWith( string value ) 判断字符串实例的开头是否匹配指定的字符串。
32public char[] ToCharArray() 返回一个带有当前 string 对象中所有字符的 Unicode 字符数组。
33public char[] ToCharArray( int startIndex, int length ) 返回一个带有当前 string 对象中所有字符的 Unicode 字符数组,从指定的索引开始,直到指定的长度为止。
34public string ToLower() 把字符串转换为小写并返回。
35public string ToUpper() 把字符串转换为大写并返回。
36public string Trim() 移除当前 String 对象中的所有前导空白字符和后置空白字符。

9.5资料

上面简单的介绍了微软的桌面开发组件WPF,同时介绍了它的DevExpress 插件的一些使用方法。大家通过以上的示例可以对WPF桌面开发有一个基本的了解,如果想开发项目,还需要使用它的文档,在文档中了解它的更多使用技巧。

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
基于WPF的3D开发是一种用于创建交互式和具有视觉效果的应用程序的技术。在WPF(Windows Presentation Foundation)中,开发人员可以使用内置的3D功能来创建复杂的3D场景和对象。 要开始基于WPF的3D开发,您首先需要了解基本的WPF概念和语法。这包括了解如何创建XAML(可扩展应用程序标记语言)文件和使用WPF的命名空间和控件。您还需要熟悉C#编程语言,因为WPF使用C#作为主要的开发语言。 接下来,您可以开始使用WPF的3D功能。WPF提供了一些基本的3D对象,如Cube、Sphere和Cylinder等。您可以使用这些对象创建简单的3D场景。您还可以使用材质和光源来增强这些对象的视觉效果。 除了基本的3D对象,WPF还提供了一些功能强大的3D控件,如Viewport3D和ModelVisual3D等。这些控件可以帮助您创建更复杂的3D场景和对象。您可以在这些控件中添加网格、模型和纹理等来创建更真实的3D效果。 在开发过程中,您可能需要了解一些3D数学和几何概念,如坐标系、投影和变换等。这些概念将帮助您理解和操作3D对象。 最后,当您完成基于WPF的3D应用程序开发时,您可以将其部署到Windows平台上的任何设备上。WPF提供了高度可定制和可伸缩的界面,使您的应用程序可以适应不同的屏幕尺寸和分辨率。 综上所述,基于WPF的3D开发是一种逐渐成熟和广泛采用的技术,可以帮助您创建具有丰富视觉效果的应用程序。通过学习WPF的基本概念和语法,以及一些3D数学和几何概念,您可以快速入门并创建出令人印象深刻的3D应用程序。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zht_bs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值