c# DataSet DataTable DataColumn DataRow数据操作集

原文: http://www.cnblogs.com/szytwo/archive/2012/03/21/2409536.html


一: 数据集的基本应用:
1.表格新增记录

2.表格删除记录

3.表格修改记录

4.表格查找和筛选记录

5.表格记录的移动

6.表格的过滤

7.数据集清空

8.数据集数据和结构的复制

9.获取脏数据

10.数据集的数据合并

11.数据集的数据回滚

12.数据集从数据库取数

13.数据集更新到数据库

14.判断数据集变更

15 获取数据集表列集合

16. 获取属于该表的行的集合

17.  获取或设置存储在指定列中的数据

18  获取记录行的状态。19  对记录行开始编辑操作、取消对该行的当前编辑、终止发生在该行的编辑

20  获取或设置列中是否允许空值
21  指示列自动递增

22  获取列名

23 在创建新行时获取或设置列的默认值

24  获取设置列的只读

25 获取数据集中的数据类型

26 计算列表达式的设置

27 指示列的每一行中的值是否必须是唯一

28 获取包含在 DataSet 中的表的集合

29  获取 DataSet 所包含的数据的自定义视图

30.表格记录新增、删除、修改的控制
31. 获取表格的记录数

32. 获取表格的当前行

33. 获取表格当前项的索引



一、数据集基本应用

1.表格新增记录

方式一:利用BindingSource的AddNew

//新增记录,推荐使用,光标位置处于当前新增记录,且正处理编辑状态
DataRow thisRow = ((DataRowView)usersBindingSource.AddNew()).Row;
thisRow["OID"] = 5;
thisRow["CNAME"] = "新增用户";
thisRow["sex"] = "m";

方式二:利用DataTable的NewRow


//新增记录(不建议使用,因为这种方式Rows.Add时并不处于编辑状态时会受约束影响,且新增时光标不会自动移动该条记录)
DataRow thisRow = userDataSet.Tables["Users"].NewRow();
thisRow["OID"] = 5;
thisRow["CNAME"] = "新增用户";
thisRow["sex"] = "m";
userDataSet.Tables["Users"].Rows.Add(thisRow);



2.表格删除记录
方式一:利用BindingSource的RemoveCurrent

if (usersBindingSource.Current != null)
   //删除当前记录,推荐使用
   usersBindingSource.RemoveCurrent();

方式二:利用DataRowCollection的Remove

//删除当前记录,不推荐使用,这种方式不会记录到RowState中,保存时不会更新
DataRow thisRow = getCurrentDataRow(usersBindingSource);
if (thisRow != null)
   userDataSet.Tables["Users"].Rows.Remove(thisRow);

方式三:利用DataRow的Delete

//删除当前记录,不推荐使用,BindingSource可以更简洁
DataRow thisRow = getCurrentDataRow(usersBindingSource);
if (thisRow != null)
   thisRow.Delete();



3.表格修改记录
方式一:利用DataRowObject[列名]直接修改


DataRow thisRow = getCurrentDataRow(usersBindingSource);

if (thisRow != null)
{
   thisRow.BeginEdit();
   thisRow["CNAME"] = "修改的名称";
   thisRow.EndEdit();
}



4.表格查找和筛选记录

方式一:利用DataRowCollection.find查找

DataColumn[] keys = new DataColumn[1];
keys[0] = userDataSet.Tables["Users"].Columns["OID"];
userDataSet.Tables["Users"].PrimaryKey = keys;
DataRow findRow = userDataSet.Tables["Users"].Rows.Find("1");

if (findRow == null)
{
   MessageBox.Show("没有找到");
}
else
{
   MessageBox.Show("成功找到,CNAME = " + findRow["CNAME"]);
}



方式二:利用BindingSource.find查找

int i = usersBindingSource.Find("OID", "1");

if (i >= 0)
   MessageBox.Show("成功找到,CNAME = " +
   userDataSet.Tables["users"].Rows[i]["CNAME"]);

方式三:利用DataTable.Select获得DataRow数组


DataRow[] AryDr = userDataSet.Tables["users"].Select("OID > 1");

for (int i = 0; i < AryDr.Length; i++)
{
    DataRow dr = AryDr[i];
    MessageBox.Show(Convert.ToString((int)dr["OID"]));
}



5.表格记录的移动

方式一:采用BindingSource的方法或position属性实现。


//指定定位到哪一行,Position不会随表格列排序而变化,0不一定就是表格的第一行

usersBindingSource.Position = 0;

//移动到上一条,对于表格列排序后,上一条不定是界面显示表格的上一条

usersBindingSource.MovePrevious();

usersBindingSource.MoveNext();//移动到下一条

usersBindingSource.MoveFirst();

usersBindingSource.MoveLast();



6.表格的过滤

方式一:利用BindingSource的Filter来实现

usersBindingSource.Filter = "OID > 1";



7.数据集清空

方式一:利用DataTable.Clear(),注意这种不会保留删除状态,保存时不会真正删除

userDataSet.Tables["users"].Clear();

方式二:利用DataTable.Rows.Clear删除,注意这种不会保留删除状态,保存时不会真正删除

userDataSet.Tables["users"].Rows.Clear();

方式三:利用BindingSource.RemoveCurrent循环删除全部记录,这种就会保留删除状态。

while (usersBindingSource.Current != null)
      usersBindingSource.RemoveCurrent();



8.数据集数据和结构的复制

方式一:整个数据集的复制

DataSet copyDS = userDataSet.Copy();

方式二:只复制单个表

DataSet copyDS = new DataSet();
copyDS.Tables.Add(userDataSet.Tables["users"].Copy());

方式三:只复制数据集的结构

copyDS = userDataSet.Clone();
MessageBox.Show(copyDS.Tables["users"].Rows.Count.ToString());



9.获取脏数据

方式一:整个数据集的脏数据

copyDS = userDataSet.GetChanges();

方式二:获取单个表的脏数据

DataTable dt = userDataSet.Tables["users"].GetChanges();



10.数据集的数据合并

方式一:整个数据集的DataSet.Merge合并

ds.Merge(userDataSet);

方式二:单个表的DataTable.Merge合并

ds.Merge(userDataSet.Tables["users"]);



11.数据集的数据回滚

方式一:数据集的数据回滚

userDataSet.RejectChanges();

方式二:数据表的数据回滚

userDataSet.Tables["users"].RejectChanges();

方式三:数据行的数据回滚

DataRow dr = getCurrentDataRow(usersBindingSource);

if (dr != null)
   dr.RejectChanges();



12.数据集从数据库取数

方式一:利用SqlDataAdapter.Fill来填充数据表

this.usersTableAdapter.Fill(this.userDataSet.Users);



13.数据集更新到数据库

方式一:利用SqlDataAdapter.Update来更新到数据库

this.Validate();
this.usersBindingSource.EndEdit();

if (this.userDataSet.HasChanges())
{
   this.usersTableAdapter.Update(this.userDataSet.Users);
   MessageBox.Show("保存成功!");
}



14.判断数据集变更

方式一:利用DataSet.HasChanges()



15获取数据集表列集合

方式一:利用DataTable.Columns

DataColumnCollection dcc = userDataSet.Tables["users"].Columns;

for (int i = 0; i < dcc.Count; i++)
{
    DataColumn dc = dcc[i];
    MessageBox.Show(dc.ColumnName);
}



16获取属于该表的行的集合

方式一:利用DataTable.Rows


DataRowCollection drc = userDataSet.Tables["users"].Rows;

for (int i = 0; i < drc.Count; i++)
{
    DataRow dr = drc[i];
    MessageBox.Show((string)dr["CNAME"]);
}



 17 获取或设置存储在指定列中的数据

方式一:利用DataRowObject[列名]来访问或设置。

DataRow dr = getCurrentDataRow(usersBindingSource);
MessageBox.Show((string)dr["CNAME"]);



18获取记录行的状态。

方式一:利用DataRow.RowState获取
DataRow dr = getCurrentDataRow(usersBindingSource);

switch (dr.RowState)
{
case DataRowState.Added:
     MessageBox.Show("新增的记录");
     break;
case DataRowState.Deleted:

     MessageBox.Show("删除的记录");
     break;
case DataRowState.Detached:
     MessageBox.Show("不属于任何DataRowCollection的状态");
     break;
case DataRowState.Modified:
     MessageBox.Show("修改的记录");
     break;
case DataRowState.Unchanged:
     MessageBox.Show("未变化的记录");
     break;
default:
     break;
};



19 对记录行开始编辑操作、取消对该行的当前编辑、终止发生在该行的编辑

方式一:利用DataRow的BeginEdit、CancelEdit、EndEdit
DataRow dr = getCurrentDataRow(usersBindingSource);
dr.BeginEdit();
dr["CNAME"] = "yy";

if (((string)dr["CNAME",DataRowVersion.Original]).Equals("YY"))
   dr.CancelEdit();
else
   dr.EndEdit();



20 获取或设置列中是否允许空值
方式一:利用DataColumn的AllowDBNull,注意这样可以允许空字符串
userDataSet.Tables["users"].Columns["tel"].AllowDBNull = false;



21指示列自动递增

方式一:利用DataColumn的AutoIncrement指示
DataColumn column = new DataColumn();
column.DataType = System.Type.GetType("System.Int32");
column.AutoIncrement = true;
column.AutoIncrementSeed = 1000;
column.AutoIncrementStep = 10;

// Add the column to a new DataTable.
DataTable table = new DataTable("table");
table.Columns.Add(column);
DataRow dr = table.NewRow();
MessageBox.Show(Convert.ToString((int)dr[0]));
DataRow dr1 = table.NewRow();
MessageBox.Show(Convert.ToString((int)dr1[0]));



 22 获取列名
方式一:利用DataColumn.ColumnName
MessageBox.Show(userDataSet.Tables["users"].Columns[0].ColumnName);



 23在创建新行时获取或设置列的默认值
方式一:利用DataColumn.DefaultValue
userDataSet.Tables["users"].Columns["CNAME"].DefaultValue = "yy";



24 获取设置列的只读
方式一:DataColumn.Readonly
userDataSet.Tables["users"].Columns["tel"].ReadOnly = true;
//这一句会出错,程序写入都不允许
userDataSet.Tables["users"].Rows[0]["tel"] = "111";



25获取数据集中的数据类型
方式一:利用DataColumn.DataType
DataColumnCollection dcc = userDataSet.Tables["users"].Columns;

for (int i = 0; i < dcc.Count; i++)
{
    DataColumn dc = dcc[i];
    MessageBox.Show(dc.DataType.ToString());
}



26计算列表达式的设置

方式一:利用DataColumn.Expression

userDataSet.Tables["users"].Columns["totalMoney"].Expression = " OID * 100 ";



27指示列的每一行中的值是否必须是唯一

方式一:利用DataColumn.Unique

userDataSet.Tables["users"].Columns["tel"].Unique = true;



28获取包含在 DataSet 中的表的集合

方式一:利用DataSet的Tables

            DataTableCollection AryTable = userDataSet.Tables;

            MessageBox.Show(AryTable[0].TableName + " " + AryTable[1].TableName);



29 获取 DataSet 所包含的数据的自定义视图

方式一:利用DataSet的DefaultViewManager

方式二:利用DataTable的DefaultView



30.表格记录新增、删除、修改的控制

方式一:利用BindingSource的AllowEdit、AllowNew、AllowRemove
usersBindingSource.AllowNew = false;

 

31. 获取表格的记录数

方式一:利用BindingSource.Count

MessageBox.Show(usersBindingSource.Count.ToString());

方式二:利用DataTable.Rows.Count

 

32.获取表格的当前行

方式一:利用bindingSource.Current

public static DataRow getCurrentDataRow(BindingSource bindSource)
 {
if (!typeof(DataRowView).IsInstanceOfType(bindSource.Current))
return null;
DataRowView drv = (DataRowView)bindSource.Current;

if (drv == null)
return null;
else
return drv.Row;
}

 

33.获取表格当前项的索引

方式一:利用BindingSource.Position
MessageBox.Show(usersBindingSource.Position.ToString());


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值