DataGrid数据转换——IValueConverter实现DataGrid数据转换

背景:
使用ASP.NET做B/S系统时,可以方便地在GRIDVIEW DATAList等数据控件中,使用自定义的代码逻辑,比如
使用 <%# GetBalance(custID) %> 这样的调用, GetBalance()为在codebehind类中定义的方法;
在WPF应用程序中有时也有类似的需求,比如数据库表Teacher中有一个字段 Title ,int 类型,取值为1-5,分别对应讲师 研究员 高工 副教授 教授 。
在wpf窗口中需要直接显示 讲师 研究员 类似的文字,而不是一个1-5的数字,从界面设计的角度 ,用文字来表示职称是最自然的方式。
因此在数据绑定的时候需要将整数转换为对应的文本职称。 但是WPF没有象ASP.NET那样的绑定表达式用法;该怎么办呢?
方法:
WPF框架提供了一个IValueConverter接口,负责数据源到数据控件绑定时,自定义转换逻辑。使用它包括以下步骤:
1.创建一个只转换器类,实现该接口;
2.给该类加入ValueConversion属性,并制定源类型和目标类型;
3.实现该接口的两个方法,Convert()与ConvertBack()
4.按照1-3创建类之后,在数据绑定控件中,设定Converter为该类的一个实例;

具体要完成上述功能:

1.首先创建实现 IValueConverter的类:

//指定转换器源类型和目标类型
[ValueConversion(typeof(int), typeof(string))]
public class TitleConverter:IValueConverter
{
//实现接口的两个方法
#region IValueConverter 成员
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
int titleInt = (int)value;
string titleStr = string.Empty;
switch (titleInt)
{
case 5:
titleStr = "教授";
break;
case 4:
titleStr = "副教授";
break;
case 3:
titleStr = "高工";
break;
case 2:
titleStr = "研究员";
break;
case 1:
titleStr = "讲师";
break;
}
return titleStr;
}

public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
string titleStr = value.ToString();
int titleInt = 0;
switch (titleStr)
{
case "教授":
titleInt = 5;
break;
case "副教授":
titleInt = 4;
break;
case "高工":
titleInt = 3;
break;
case "研究员":
titleInt = 2;
break;
case "讲师":
titleInt = 1;
break;
}
return titleInt;
}
#endregion
}

2.前台调用
首先需要在窗口中声明转换器类名称空间 并定义一个转换器资源
<Window x:Class="EvalStarServer.UserManage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:EvalStarServer.BLL"
Title="UserManage" >
<Window.Resources>
<local:TitleConverter x:Key="myTitleConverter"></local:TitleConverter>
</Window.Resources>

<DataGrid Name="gdEvaluator" CanUserAddRows="False">
<DataGrid.Columns>
<DataGridTextColumn Header="姓名" Binding="{Binding Path=Name}"></DataGridTextColumn>
<DataGridTextColumn Header="职称" Binding="{Binding Path=Elevel,Converter={StaticResource myTitleConverter}}"></DataGridTextColumn>
<DataGridTextColumn Header="编号" Binding="{Binding Path=Eno}"></DataGridTextColumn>
<DataGridTemplateColumn Header="操作">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Tag="{Binding Path=ID}" Click="OnDeleteEvl">删除</Button>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Windows>



这样就实现了前台根据数据中的整数 显示不同的职称。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 Dojo Datagrid实现数据删除功能,可以按照以下步骤进行: 1. 在 Datagrid 中添加一个列,用于显示删除按钮。 2. 在该列中定义一个自定义单元格模板,用于显示删除按钮。 3. 在该模板中添加一个点击事件处理程序,以便在单击删除按钮时触发删除操作。 4. 在删除操作处理程序中获取要删除的数据行,并将其从数据存储中删除。 以下是一个简单的示例代码,演示如何在 Dojo Datagrid实现数据删除功能: ```javascript require(["dojo/_base/lang", "dojo/_base/declare", "dojo/data/ItemFileWriteStore", "dojox/grid/DataGrid", "dojo/domReady!"], function(lang, declare, ItemFileWriteStore, DataGrid){ var data = { identifier: "id", items: [ { id: 1, name: "John Doe", age: 32 }, { id: 2, name: "Jane Smith", age: 25 }, { id: 3, name: "Bob Johnson", age: 45 } ] }; var store = new ItemFileWriteStore({data: data}); var grid = new DataGrid({ structure: [ { name: "Name", field: "name", width: "200px" }, { name: "Age", field: "age", width: "100px" }, { name: "Delete", field: "id", width: "100px", formatter: function(id){ return "<button data-dojo-type='dijit/form/Button'>Delete</button>"; }, cellType: dojox.grid.cells.Cell, editable: false, onClick: function(evt){ var row = grid.getItem(evt.rowIndex); store.deleteItem(row); store.save(); } } ], store: store, rowSelector: "20px" }, "grid"); grid.startup(); }); ``` 在这个示例中,我们添加了一个名为“Delete”的列,用于显示删除按钮。我们定义了一个自定义单元格模板,用于显示一个具有“Delete”标签的按钮。我们还添加了一个事件处理程序,以便在单击按钮时触发删除操作。在该处理程序中,我们获取要删除的数据行,并将其从数据存储中删除。最后,我们使用 ItemFileWriteStore 作为数据存储,并将其与 Datagrid 组件一起使用。 注意:该示例代码仅供参考,具体实现需要根据具体情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值