【ASP.NET AJAX】RadGrid Update 方式研究

应用场景

采用 RadGrid 绑定 EntityDataSource,在 RadGrid 行内编辑,实现对数据库的更新。

 

使用 EntityDataSource 事件

  • 使用 EntityDataSource 的 Updating 事件,在这个事件通过 e.Entity 可获取修改后的数据对象,从而进行数据库的更新操作。
  • 优点:实现简单,节省代码。
  • 缺点:无法获取修改之前的旧数据,且无法得知修改了哪些数据。

使用 RadGrid 事件

  • 使用 RadGrid 的 UpdateCommand 事件。
  • 获取被编辑项目:
    GridEditableItem item = e.Item as GridEditableItem;
  • 可获取 Hashtable 类型的修改前旧数据:
    item.SavedOldValues
  • 可获取 Hashtable 类型的修改后新数据:
    Hashtable ht = new Hashtable();
    item.ExtractValues(ht);
  • 可把新数据赋值给实体对象:
    item.UpdateValues(objectToUpdate);
  • 优点:可访问到详细的更新操作相关的数据,功能更强大。
  • 缺点:
    新旧数据集的类型是 Hashtable,其中的数据都是 string 类型,需要进行转换才能使用;
    item.UpdateValues 方法虽然可以直接给对象赋值,免去了类型转换的代码,但是造成了对 Telerik 程序集的耦合。

 

字符串类型转换

以下的代码可以将字符串转换为绝大多数的类型:

private object Convert(Type t, string text)
{
    return TypeDescriptor.GetConverter(t).ConvertFromInvariantString(text);
}

private T Convert<T>(string text)
{
    T t = (T)TypeDescriptor.GetConverter(typeof(T)).ConvertFromInvariantString(text);
    return t;
}

 

posted on 2013-09-12 20:07  CsharpStyle  阅读(238)  评论(0编辑  收藏  举报