zoukankan      html  css  js  c++  java
  • [原创]创建指定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        }
  • 相关阅读:
    日期时间工具类
    jQuery 使用attr()方式设置 checked 失效原因及解决方法
    vue总结
    【笔记】golang中使用protocol buffers的底层库直接解码二进制数据
    【笔记】对golang的大量小对象的管理真的是无语了……
    【记录一个问题】thanos receiver在更换tsdb文件后,内存并未显著下降
    【笔记】论文阅读:《Gorilla: 一个快速, 可扩展的, 内存式时序数据库》
    【分享】thanos receiver的grafana报表配置
    【采坑小计】thanos receiver的官方文档中,并未说明tsdb落盘的配置方式
    【记录一个问题】thanos receiver在tsdb切换期间,导致remote write接口失败增加
  • 原文地址:https://www.cnblogs.com/think8848/p/1164490.html
Copyright © 2011-2022 走看看