• [原创]创建指定RowState属性的DataRow实例


     1private void button1_Click(object sender, RoutedEventArgs e)
     2        {
     3            MessageBox.Show(CreateStateRow<cinlapdemoDataSet.CustomersDataTable,cinlapdemoDataSet.CustomersRow>().RowState.ToString());
     4        }

     5
     6        public static R CreateStateRow<T, R>(params NewRowState[] newRowState)
     7            where T : DataTable
     8            where R : DataRow
     9        {
    10            NewRowState nrs = NewRowState.Modified;
    11
    12            if (newRowState.Length > 1)
    13            {
    14                throw new Exception("创建行状态个数大于1");
    15            }

    16            else if (newRowState.Length == 1)
    17            {
    18                nrs = newRowState[0];
    19            }

    20
    21            int oldRecord = 1;
    22            int newRecord = 2;
    23
    24            if (nrs != NewRowState.Modified)
    25            {
    26                if (nrs == NewRowState.Added)
    27                {
    28                    oldRecord = -1;
    29                    newRecord = 1;
    30                }

    31                else
    32                {
    33                    oldRecord = 1;
    34                    newRecord = -1;
    35                }

    36            }

    37
    38            Type tableType = typeof(T);
    39            Type rowType = typeof(R);
    40
    41            T dataTable = (T)tableType.Assembly.CreateInstance(tableType.FullName);
    42
    43            DataRow row = dataTable.NewRow();
    44
    45            FieldInfo fiOldRecord = rowType.GetField("oldRecord", BindingFlags.NonPublic | BindingFlags.Instance);
    46            FieldInfo fiNewRecord = rowType.GetField("newRecord", BindingFlags.NonPublic | BindingFlags.Instance);
    47
    48            fiOldRecord.SetValue(row, oldRecord);
    49            fiNewRecord.SetValue(row, newRecord);
    50
    51            return (R)row;
    52        }

    53
    54        public enum NewRowState : int
    55        {
    56            Added = 0,
    57            Modified = 1,
    58            Deleted = 2
    59        }
  • 相关阅读:
    Windows下搭建JSP开发环境
    ssh 学习笔记
    18 11 27 长连接 短链接
    18 11 26 用多进程 多线程 携程 实现 http 服务器的创建
    18 11 24 简单的http服务器
    关于 某个智慧树课堂的 机器与机器交流方法
    18 11 23 正则学习
    尝试解决 : Microsoft Visual C++ 14.0 is required 的问题
    18 11 20 网络通信 ----多任务---- 携程 ----生成器
    18 11 20 网络通信 ----多任务---- 携程 ----迭代器
  • 原文地址:https://www.cnblogs.com/think8848/p/1164490.html
Copyright © 2020-2023  润新知