1建立一个DataSetHelper类(DataSetHelper.cs)
public
class
DataSetHelper
... {
public DataSet ds;
public DataSetHelper(ref DataSet DataSet)
...{
ds = DataSet;
}
public DataSetHelper()
...{
ds = null;
}
private bool ColumnEqual(object A, object B)
...{
if (A == DBNull.Value && B == DBNull.Value) // both are DBNull.Value
return true;
if (A == DBNull.Value || B == DBNull.Value) // only one is DBNull.Value
return false;
return (A.Equals(B)); // value type standard comparison
}
public DataTable SelectDistinct(string TableName, DataTable SourceTable, string FieldName)
...{
DataTable dt = new DataTable(TableName);
dt.Columns.Add(FieldName, SourceTable.Columns[FieldName].DataType);
object LastValue = null;
foreach (DataRow dr in SourceTable.Select("", FieldName))
...{
if (LastValue == null || !(ColumnEqual(LastValue, dr[FieldName])))
...{
LastValue = dr[FieldName];
dt.Rows.Add(new object[] ...{ LastValue });
}
}
if (ds != null)
ds.Tables.Add(dt);
return dt;
}
}
... {
public DataSet ds;
public DataSetHelper(ref DataSet DataSet)
...{
ds = DataSet;
}
public DataSetHelper()
...{
ds = null;
}
private bool ColumnEqual(object A, object B)
...{
if (A == DBNull.Value && B == DBNull.Value) // both are DBNull.Value
return true;
if (A == DBNull.Value || B == DBNull.Value) // only one is DBNull.Value
return false;
return (A.Equals(B)); // value type standard comparison
}
public DataTable SelectDistinct(string TableName, DataTable SourceTable, string FieldName)
...{
DataTable dt = new DataTable(TableName);
dt.Columns.Add(FieldName, SourceTable.Columns[FieldName].DataType);
object LastValue = null;
foreach (DataRow dr in SourceTable.Select("", FieldName))
...{
if (LastValue == null || !(ColumnEqual(LastValue, dr[FieldName])))
...{
LastValue = dr[FieldName];
dt.Rows.Add(new object[] ...{ LastValue });
}
}
if (ds != null)
ds.Tables.Add(dt);
return dt;
}
}
DataSet ds;
DataSetHelper dsHelper;
ds = new DataSet();
dsHelper = new DataSetHelper( ref ds);
// Create source table
DataTable dt = new DataTable( " Orders " );
dt.Columns.Add( " EmployeeID " , Type.GetType( " System.String " ));
dt.Columns.Add( " OrderID " , Type.GetType( " System.Int32 " ));
dt.Columns.Add( " Amount " , Type.GetType( " System.Decimal " ));
dt.Rows.Add( new object [] ... { "Sam", 5, 25.00 } );
dt.Rows.Add( new object [] ... { "Tom", 7, 50.00 } );
dt.Rows.Add( new object [] ... { "Sue", 9, 11.00 } );
dt.Rows.Add( new Object[] ... { "Tom", 12, 7.00 } );
dt.Rows.Add( new Object[] ... { "Sam", 14, 512.00 } );
dt.Rows.Add( new Object[] ... { "Sue", 15, 17.00 } );
dt.Rows.Add( new Object[] ... { "Sue", 22, 2.50 } );
dt.Rows.Add( new object [] ... { "Tom", 24, 3.00 } );
dt.Rows.Add( new object [] ... { "Tom", 33, 78.75 } );
ds.Tables.Add(dt);
DataTable td = dsHelper.SelectDistinct( " DistinctEmployees " , ds.Tables[ " Orders " ], " EmployeeID " );
this .GridView1.DataSource = td;
this .GridView1.DataBind();
DataSetHelper dsHelper;
ds = new DataSet();
dsHelper = new DataSetHelper( ref ds);
// Create source table
DataTable dt = new DataTable( " Orders " );
dt.Columns.Add( " EmployeeID " , Type.GetType( " System.String " ));
dt.Columns.Add( " OrderID " , Type.GetType( " System.Int32 " ));
dt.Columns.Add( " Amount " , Type.GetType( " System.Decimal " ));
dt.Rows.Add( new object [] ... { "Sam", 5, 25.00 } );
dt.Rows.Add( new object [] ... { "Tom", 7, 50.00 } );
dt.Rows.Add( new object [] ... { "Sue", 9, 11.00 } );
dt.Rows.Add( new Object[] ... { "Tom", 12, 7.00 } );
dt.Rows.Add( new Object[] ... { "Sam", 14, 512.00 } );
dt.Rows.Add( new Object[] ... { "Sue", 15, 17.00 } );
dt.Rows.Add( new Object[] ... { "Sue", 22, 2.50 } );
dt.Rows.Add( new object [] ... { "Tom", 24, 3.00 } );
dt.Rows.Add( new object [] ... { "Tom", 33, 78.75 } );
ds.Tables.Add(dt);
DataTable td = dsHelper.SelectDistinct( " DistinctEmployees " , ds.Tables[ " Orders " ], " EmployeeID " );
this .GridView1.DataSource = td;
this .GridView1.DataBind();
原文名:HOW TO: Implement a DataSet SELECT DISTINCT Helper Class in Visual C# .NET