DataTable

using System.Data

  • DataRowCollection----->DataRow

  • DataColumnCollection---->DataColumns

  • DataView

1.添加列数据

//第一列
DataColumn id = new DataColumn();
id.ColumnName = "id";
id.Caption = "学号";
id.DataType = typeof(string);
id.ReadOnly = true;
id.AllowDBNull = false;
id.Unique = true;
dt.Columns["id"].AutoIncrement = true;
dt.Columns["id"].AutoIncrementSeed = 1;//开始值
dt.Columns["id"].AutoIncrementStep = 1;//增值
dt.Columns.Add(id);
//第二列
DataColumn name = dt.Columns.Add("name", typeof(string));
name.Caption = "姓名";
//第三、四列
dt.Columns.AddRange(new DataColumn[] {
    new DataColumn("sex",typeof(char)),
    new DataColumn("age",typeof(int)),
});
dt.Columns["sex"]!.DefaultValue = "女";
//设置主键
dt.PrimaryKey = new DataColumn[] { dt.Columns["id"] };

2.添加行数据

//第一行
DataRow rowId = dt.NewRow();
rowId["id"] = "S001";
rowId["name"] = "小春";
rowId["sex"] = "女";
rowId["age"] = "23";
dt.Rows.Add(rowId);
//.....行
var newRow = new Object[] {
    new object[]{ "S002","日富美",'女',22},
    new object[]{ "S003","花子", '女', 21 },
    new object[]{ "S004","梓", '女', 23},
};
foreach (Object[] item in newRow)
{
    dt.Rows.Add(item);
}

3.SqlAdapter

SqlAdapter adapter=..........;
//获取
adpter.Fill(DataTable);
//更新
SqlCommandBuilder thisBuilder = new SqlCommandBuilder(adapter);
adapter.Update(dt!);

4.获取行数据

//配合DataGridView选中行使用
int scalar = dgv.Rows.GetRowCount(DataGridViewElementStates.Selected);
if (scalar > 0)
{
    int Y = dgv.CurrentCellAddress.Y;
    txtName.Text = dt.Rows[Y]["names"].ToString();
}
//
int x = dgv.CurrentCellAdress.X;//列
int y = dgv.CurrentCellAdress.y;//行
dt.Rows[y][x] = dgv.Rows[y].Cells[x].Value;

5.排序

dt.DefaultView.Sort = "birthday ASC";
dt.DefaultView.Sort = "birthday DESC";

6.表复制

dt.Copy();//表结构+数据
dt.Clone();//表结构

7.筛选

//RowFilter-->DataGridView会重新渲染
 dt.DefaultView.RowFilter = null
 dt.DefaultView.RowFilter = String.Format("EName LIKE '%{0}%'", name);
 dt.DefaultView.RowFilter="city='千禧年'";
//Select-->DataGridView不会更新
 DataRow[] result = dt.Select("city='千禧年'");
 DataTable copy = dt.Clone();
 foreach (DataRow item in result)
 {
     copy.ImportRow(item);
 }
 dgv.DataSource = copy;
//Computed-->给定筛选条件,然后表达式计算
 object res=dt.Compute("Count(sex)", "sex='男'");
//Find-->只会在PrimaryKey中查找,无主键-MissingPrimaryKeyException
 DataRow res = dt.Rows.Find("S001");
 txtName.Text = res[1].ToString();

8.Linq

txtCount.Text = dt.AsEnumerable().Count().ToString();
txtMax.Text = dt.AsEnumerable().Max(x => x["birthday"]).ToString();
txtMin.Text = dt.AsEnumerable().Min(x => x["birthday"]).ToString();

9.DataTable转List

 public static List<T> DataTableToList<T>(this DataTable dt)
 {
     List<T> lstEntity = new List<T>();
     PropertyInfo[] arrProInfo = typeof(T).GetProperties();
     foreach (DataRow rowItem in dt.Rows)
     {
         T entity = Activator.CreateInstance<T>();
         for (int i = 0; i < dt.Columns.Count; i++)
         {
             PropertyInfo? proInfo = arrProInfo.FirstOrDefault(X => X.Name.Equals(dt.Columns[i].ColumnName));
             if (!Convert.IsDBNull(rowItem[i]))//T-SQL中==NULL,则不添加。(System.DBNull无法转换)
                 proInfo?.SetValue(entity, rowItem[i]);
         }
         lstEntity.Add(entity);
     }
     return lstEntity;
 }

10.List转DataTable

        public static DataTable ListToDataTable<T>(this List<T> lst)
        {
            PropertyInfo[] arrPro = typeof(T).GetProperties();
            DataTable dt = new DataTable(typeof(T).Name);
            //添加列
            foreach (PropertyInfo item in arrPro)
            {
                dt.Columns.Add(item.Name, item.PropertyType);
            }
            //添加行
            foreach (T item in lst)
            {
                if (item != null)
                {
                    var values = new object[arrPro.Length];
                    for (int i = 0; i < arrPro.Length; i++)
                    {
#pragma warning disable CS8601
                        values[i] = arrPro[i].GetValue(item);
                    }
                    dt.Rows.Add(values);
                }
            }
            return dt;
        }
        values[i] = arrPro[i].GetValue(item);
                    }
                    dt.Rows.Add(values);
                }
            }
            return dt;
        }
  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值