• GridControl Linq


    1. 新增数据

    GridView的NewItemRowPosition属性设置为Bottom

    代码:

     1 List<ObjectType> DetailCollection { get; set; }
     2 private void XXXForm_Load(object sender, EventArgs e) {
     3     DetailCollection = new List<ObjectType>();
     4 }
     5 private void gvDataView_CustomRowCellEditForEditing(object sender, CustomRowCellEditEventArgs e) {
     6     if (e.RowHandle < 0) { //新增数据
     7         DetailCollection.Add(new ObjectType() { AutoID = 0 });
     8         gvDataView.RefreshData();
     9         gvDataView.FocusedRowHandle = DetailCollection.Count - 1;
    10     }
    11 }
    12 // 删除行
    13 private void gvDataView_KeyUp(object sender, KeyEventArgs e) {
    14     if (e.KeyCode == Keys.Delete && this.gvDataView.FocusedRowHandle >= 0) {
    15         int index = gvDataView.FocusedRowHandle;
    16         if (MessageBoxHelper.ShowConfirm("删除不可恢复,是否确定删除?") == DialogResult.OK) {
    17             DetailCollection.RemoveAt(index);
    18             gvDataView.RefreshData();
    19             gvDataView.FocusedRowHandle = DetailCollection.Count > index ? index : -1;
    20         }
    21     }
    22 }

     2. 编辑数据

    GridControl可绑定Linq查询的匿名类型结果集,但是不可编辑

    代码:

    1 var ds = from xc in XXXCollection
    2          where ......
    3          select new {
    4              ACol = xc.XXX,
    5              BCol = xc.YYY,
    6          };
    7 gcDataCtrl.DataSource = ds.ToArray();

    注:在绑定的时候,需要结果集ds转换一下,ToArray()/ToList()都可以。

    绑定显示不会有问题,但是在编辑的时候就会出现编辑不了的情况。

    GridControl不支持匿名类型的编辑,需要将结果集转换一下,这里转换成了DataTable类型。

    代码:

    1 var ds = from xc in XXXCollection
    2          where ......
    3          select new {
    4              ACol = xc.XXX,
    5              BCol = xc.YYY,
    6          };
    7 gcDataCtrl.DataSource = ds.ConvertToDataTable();

    系统库是没有这个函数的,所有需要使用扩展方法。

    代码:

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Data;
     4 using System.Reflection;
     5 
     6 namespace ManageSystem.Common {
     7     public static class ClassExtension {
     8         #region "Convert Generic List to DataTable"
     9         /// <summary>
    10         /// Convert a List{T} to a DataTable.
    11         /// </summary>
    12         public static DataTable ConvertToDataTable<T>(this IEnumerable<T> items) {
    13             var tb = new DataTable(typeof(T).Name);
    14             PropertyInfo[] props = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);
    15 
    16             foreach (PropertyInfo prop in props) {
    17                 Type t = GetCoreType(prop.PropertyType);
    18                 tb.Columns.Add(prop.Name, t);
    19             }
    20 
    21             foreach (T item in items) {
    22                 var values = new object[props.Length];
    23 
    24                 for (int i = 0; i < props.Length; i++) {
    25                     values[i] = props[i].GetValue(item, null);
    26                 }
    27                 tb.Rows.Add(values);
    28             }
    29             return tb;
    30         }
    31 
    32         /// <summary>
    33         /// Determine of specified type is nullable
    34         /// </summary>
    35         public static bool IsNullable(Type t) {
    36             return !t.IsValueType || (t.IsGenericType && t.GetGenericTypeDefinition() == typeof(Nullable<>));
    37         }
    38 
    39         /// <summary>
    40         /// Return underlying type if type is Nullable otherwise return the type.
    41         /// </summary>
    42         public static Type GetCoreType(Type t) {
    43             if (t != null && IsNullable(t)) {
    44                 if (!t.IsValueType) {
    45                     return t;
    46                 }
    47                 else {
    48                     return Nullable.GetUnderlyingType(t);
    49                 }
    50             }
    51             else {
    52                 return t;
    53             }
    54         }
    55         #endregion
    56     }
    57 }
  • 相关阅读:
    像草一样,朝海生长
    那一次,我们属于彼此
    discuz !NT 3.5 论坛整合 .net 网站用户登录,退出
    oracel 10g 网络服务管理: 主机登录
    断章
    屏蔽浏览器左下角的js错误提示
    IE下载的文件自动加上中括号的Bug解决方案
    oracle下重置用户的所有序列
    循环追加表空间的数据文件的存储过程
    查询所有连接到ORACLE服务器的客户端IP地址的方法
  • 原文地址:https://www.cnblogs.com/zhuhc/p/3477957.html
Copyright © 2020-2023  润新知