一、数据集基本应用
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合并
方式二:单个表的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());
二、数据集其它应用
1 .其它
1.1 指示DataTable中的字符串比较是否区分大小写
方式一:指示DataSet的CaseSensitive
userDataSet.CaseSensitive = true ; DataRow[] AryDR = userDataSet.Tables[" users " ].Select(" CNAME = 'yy' " );
方式二:指示DataTable的CaseSensitive
userDataSet.Tables[" users " ].CaseSensitive = true ; DataRow[] AryDR = userDataSet.Tables[" users " ].Select(" CNAME = 'yy' " );
1.2 指示在尝试执行任何更新操作时是否遵循约束规则
方式一:指示DataSet的EnforceConstraints
userDataSet.EnforceConstraints = false ; DataRow thisRow = userDataSet.Tables[" Users " ].NewRow(); thisRow[" OID " ] = 5 ; thisRow[" sex " ] = " m " ; userDataSet.Tables[" Users " ].Rows.Add(thisRow); // 如果没有置EnforceConstraints,则会添加失败。
1.3 获取与 DataSet 相关的自定义用户信息的集合
方式一:利用DataSet的ExtendedProperties
PropertyCollection properties = userDataSet.ExtendedProperties;// Add a timestamp value to the PropertyCollection. if (!properties.ContainsKey(" TimeStamp " )) properties.Add(" TimeStamp " , DateTime.Now); PropertyCollection properties1 = userDataSet.ExtendedProperties; MessageBox.Show(((DateTime)properties1[" TimeStamp " ]).ToString());
方式二:利用DataTable的ExtendedProperties
PropertyCollection properties = userDataSet.Tables[" users " ].ExtendedProperties;// Add a timestamp value to the PropertyCollection. if (!properties.ContainsKey(" TimeStamp " )) properties.Add(" TimeStamp " , DateTime.Now); PropertyCollection properties1 = userDataSet.Tables[" users " ].ExtendedProperties; MessageBox.Show(((DateTime)properties1[" TimeStamp " ]).ToString());
1.4 获取用于将表链接起来并允许从父表浏览到子表的关系的集合
方式一:利用DataSet的Relations
DataColumn[] aryChildColumn = userDataSet.Relations[0 ].ChildColumns; DataColumn[] aryParentColumn = userDataSet.Relations[0 ].ParentColumns; MessageBox.Show(aryChildColumn[0 ].ColumnName + " " + aryParentColumn[0 ].ColumnName);
1.5 为每个 DataTable 返回带有一个结果集的DataTableReader
方式一:利用DataSet.CreateDataReader()
using (DataTableReader reader = userDataSet.CreateDataReader()) {do {if (!reader.HasRows) { Console.WriteLine(" Empty DataTableReader " ); }else {while (reader.Read()) // 下一个数据行 {for (int i = 0 ; i < reader.FieldCount; i++) { Console.Write(reader[i] + " " ); } Console.WriteLine(); } } Console.WriteLine(" ======================== " ); } while (reader.NextResult());// 下一个数据表 }
方式二:利用DataTable.CreateDataReader()
1.6 返回存储在 DataSet 中的数据的 XML 表示形式
方式一:利用DataSet.GetXml();
MessageBox.Show(userDataSet.GetXml());
1.7 获取或设置充当数据表主键的列的数组
方式一:设置DataTable.PrimaryKey
DataColumn[] keys = new DataColumn[1 ]; keys[0 ] = userDataSet.Tables[" Users " ].Columns[" OID " ]; userDataSet.Tables[" Users " ].PrimaryKey = keys;
1.8 在加载数据时关闭通知、索引维护和约束
方式一:DataTable.BeginLoadData()和 EndLoadData()。
1.9 将 DataRow 复制到 DataTable 中,保留任何属性设置以及初始值和当前值
方式一:利用DataTable.ImportRow
DataSet copyDS = new UserDataSet(); copyDS.Tables[" users " ].ImportRow(userDataSet.Tables[" users " ].Rows[0 ]); MessageBox.Show( copyDS.Tables[" users " ].Rows[0 ][" cname " , DataRowVersion.Original] + " " + copyDS.Tables[" users " ].Rows[0 ][" cname " , DataRowVersion.Current]);
1.10 查找和更新特定行。如果找不到任何匹配行,则使用给定值创建新行
方式一:利用DataTable.LoadDataRow
DataRow newRow = userDataSet.Tables[" users " ].NewRow(); newRow[
请发表评论