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