本文转自:http://www.cnblogs.com/springyangwc/archive/2011/03/01/1968218.html
先看示例代码:
// Put the next line into the Declarations section. |
private System.Data.DataSet dataSet; |
|
private void MakeDataTables() |
{ |
// Run all of the functions. |
MakeParentTable(); |
MakeChildTable(); |
MakeDataRelation(); |
BindToDataGrid(); |
} |
|
private void MakeParentTable() |
{ |
// Create a new DataTable. |
System.Data.DataTable table = new DataTable( "ParentTable" ); |
// Declare variables for DataColumn and DataRow objects. |
DataColumn column; |
DataRow row; |
|
// Create new DataColumn, set DataType, |
// ColumnName and add to DataTable. |
column = new DataColumn(); |
column.DataType = System.Type.GetType( "System.Int32" ); |
column.ColumnName = "id" ; |
column.ReadOnly = true ; |
column.Unique = true ; |
// Add the Column to the DataColumnCollection. |
table.Columns.Add(column); |
|
// Create second column. |
column = new DataColumn(); |
column.DataType = System.Type.GetType( "System.String" ); |
column.ColumnName = "ParentItem" ; |
column.AutoIncrement = false ; |
column.Caption = "ParentItem" ; |
column.ReadOnly = false ; |
column.Unique = false ; |
// Add the column to the table. |
table.Columns.Add(column); |
|
// Make the ID column the primary key column. |
DataColumn[] PrimaryKeyColumns = new DataColumn[1]; |
PrimaryKeyColumns[0] = table.Columns[ "id" ]; |
table.PrimaryKey = PrimaryKeyColumns; |
|
// Instantiate the DataSet variable. |
dataSet = new DataSet(); |
// Add the new DataTable to the DataSet. |
dataSet.Tables.Add(table); |
|
// Create three new DataRow objects and add |
// them to the DataTable |
for ( int i = 0; i<= 2; i++) |
{ |
row = table.NewRow(); |
row[ "id" ] = i; |
row[ "ParentItem" ] = "ParentItem " + i; |
table.Rows.Add(row); |
} |
} |
|
private void MakeChildTable() |
{ |
// Create a new DataTable. |
DataTable table = new DataTable( "childTable" ); |
DataColumn column; |
DataRow row; |
|
// Create first column and add to the DataTable. |
column = new DataColumn(); |
column.DataType= System.Type.GetType( "System.Int32" ); |
column.ColumnName = "ChildID" ; |
column.AutoIncrement = true ; |
column.Caption = "ID" ; |
column.ReadOnly = true ; |
column.Unique = true ; |
|
// Add the column to the DataColumnCollection. |
table.Columns.Add(column); |
|
// Create second column. |
column = new DataColumn(); |
column.DataType= System.Type.GetType( "System.String" ); |
column.ColumnName = "ChildItem" ; |
column.AutoIncrement = false ; |
column.Caption = "ChildItem" ; |
column.ReadOnly = false ; |
column.Unique = false ; |
table.Columns.Add(column); |
|
// Create third column. |
column = new DataColumn(); |
column.DataType= System.Type.GetType( "System.Int32" ); |
column.ColumnName = "ParentID" ; |
column.AutoIncrement = false ; |
column.Caption = "ParentID" ; |
column.ReadOnly = false ; |
column.Unique = false ; |
table.Columns.Add(column); |
|
dataSet.Tables.Add(table); |
|
// Create three sets of DataRow objects, |
// five rows each, and add to DataTable. |
for ( int i = 0; i <= 4; i ++) |
{ |
row = table.NewRow(); |
row[ "childID" ] = i; |
row[ "ChildItem" ] = "Item " + i; |
row[ "ParentID" ] = 0 ; |
table.Rows.Add(row); |
} |
for ( int i = 0; i <= 4; i ++) |
{ |
row = table.NewRow(); |
row[ "childID" ] = i + 5; |
row[ "ChildItem" ] = "Item " + i; |
row[ "ParentID" ] = 1 ; |
table.Rows.Add(row); |
} |
for ( int i = 0; i <= 4; i ++) |
{ |
row = table.NewRow(); |
row[ "childID" ] = i + 10; |
row[ "ChildItem" ] = "Item " + i; |
row[ "ParentID" ] = 2 ; |
table.Rows.Add(row); |
} |
} |
|
private void MakeDataRelation() |
{ |
// DataRelation requires two DataColumn |
// (parent and child) and a name. |
DataColumn parentColumn = |
dataSet.Tables[ "ParentTable" ].Columns[ "id" ]; |
DataColumn childColumn = |
dataSet.Tables[ "ChildTable" ].Columns[ "ParentID" ]; |
DataRelation relation = new |
DataRelation( "parent2Child" , parentColumn, childColumn); |
dataSet.Tables[ "ChildTable" ].ParentRelations.Add(relation); |
} |
|
private void BindToDataGrid() |
{ |
// Instruct the DataGrid to bind to the DataSet, with the |
// ParentTable as the topmost DataTable. |
dataGrid1.SetDataBinding(dataSet, "ParentTable" ); |
} |
DataTable的一些属性,如:
DataTable dt = new DataTable();
dt.Columns.Add("Name",typeof(string));
//增加一列,列名为Name
DataRow dr = dt.NewRow();
dr["Name"] = "Spring Yang";
dt.Rows.Add(dr);
//增加一行;
dt.Rows.Remove(dr);
//删除一行;
dt.Cloumns.Remove("Name");
删除一列
DataTable dtnew = dt.Copy();
dtnew 指向的是dt所指向的内存地址,给dtnew操作也是对dt操作
只有这样:
DataTable dttwo = dt.Clone();
foreach(DataRow dr in dt.Rows)
{
DataRow newdr = dttwo.NewRow();
newdr.ItemArray = dr.ItemArray;
dttwo.Rows.Add(newdr);
}
再对dttwo操作就不会修改dt了.这应该是值类型和引用类型的区别吧.