.net 1.1中的解决方法(转)
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;
}
}
2 建立一个Web窗体,在page_load中写下面的代码
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();
public
DataTable GetTopSearch()

{
DataSet dsKeyword = dal.GetKeyword();
DataSet dsTopSearch = new DataSet();
for (int i = 0; i < 4; i++)

{
string keyword = dsKeyword.Tables[0].Rows[i]["Name"].ToString();
string condition = dsKeyword.Tables[0].Rows[i]["SearchCondition"].ToString();
dsTopSearch.Merge(dal.GetTopSearch(keyword,condition));
}
return dsTopSearch.Tables[0].DefaultView.ToTable(true, "ID","Name","Author","Publisher","PublishDate","TypeName","Price","SalePrice","SavePrice","Rebate","ImagePath","ContentIntro");
}
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;
}
}
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();
.net 2.0中的解决方法(原创)
public
DataTable GetTopSearch()
{
DataSet dsKeyword = dal.GetKeyword();
DataSet dsTopSearch = new DataSet();
for (int i = 0; i < 4; i++)
{
string keyword = dsKeyword.Tables[0].Rows[i]["Name"].ToString();
string condition = dsKeyword.Tables[0].Rows[i]["SearchCondition"].ToString();
dsTopSearch.Merge(dal.GetTopSearch(keyword,condition));
}
return dsTopSearch.Tables[0].DefaultView.ToTable(true, "ID","Name","Author","Publisher","PublishDate","TypeName","Price","SalePrice","SavePrice","Rebate","ImagePath","ContentIntro");
}
先把DataTable转成DataView,再通过DataView.ToTable()转回DataTable,ToTable()方法中有一个重载可以轻松消除重复行.
注:该重载的第二个参数为要保存的字段名.
