DataTable 合并重复行(解决方案)
有很多情况下,需要俩个同样架构的 DataTable 的合并操作,但合并操作的时候,会有很多
重复行的数据存在于 DataTable 中,可以通过循环的方式去处理,但这样代码比较复杂,而
且效率非常低下,DataView 提供了一个很好的解决方案。如下所示:
//去掉重复行的 DataView
DataView myDataView = new DataView(dataTable);
string[] strComuns ={ "dataColumn", "dataType" };
dg2.DataSource = myDataView.ToTable(true, strComuns);
主要做的工作就是把存在重复行数据的 DataTable 送给 Dataview.然后使用 DataView 类的一
个 ToTable 方法中的一个重载方法。就是上面用的,一共有两个参数,第一个 bool 类型参数
就是指定装换成 DataTable 后是否保留重复行,第二个参数是一个字符串数组,用来指定转
换成 DataTable 后保留原有表中的哪些字段。字段名不区分大小写。
应用实例:
public partial class DataTableMergeDemo : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
if(!IsPostBack)
{
}
MyTable = CreateDataSource();
this.GridView1.DataSource = MyTable;
this.GridView1.DataBind();
//设置DataTable数据交互截止
private DataTable MyTable
{
}
set
{
}
get
{
}
ViewState["DataSource"] = value;
return (DataTable)ViewState["DataSource"];
//构建数据源
private DataTable CreateDataSource()
DataTable dt = new DataTable("DataSource");
dt.Columns.Add("Sequence");
dt.Columns.Add("UserName");
dt.Columns.Add("Address");
dt.AcceptChanges();
DataRow dr1 = dt.NewRow();
dr1["Sequence"] = "1";
dr1["UserName"] = "user1";
dr1["Address"] = "Address1";
DataRow dr2 = dt.NewRow();
dr2["Sequence"] = "2";
dr2["UserName"] = "user2";
dr2["Address"] = "Address2";
dt.Rows.Add(dr1);
dt.Rows.Add(dr2);
dt.Rows.Add(dt.NewRow());
dt.Rows.Add(dt.NewRow());
return dt;
{
}
private DataTable NewTable()
{
}
DataTable dt = MyTable.Clone();
DataRow dr1 = dt.NewRow();
dr1["Sequence"] = "1";
dr1["UserName"] = "user1";
dr1["Address"] = "Address1";
DataRow dr2 = dt.NewRow();
dr2["Sequence"] = "3";
dr2["UserName"] = "user3";
dr2["Address"] = "Address3";
dt.Rows.Add(dr1);
dt.Rows.Add(dr2);
return dt;
protected void Button1_Click(object sender, EventArgs e)
{
MyTable.Merge(NewTable());
DataView dv = new DataView(MyTable);
string[] columnsArray = { "Sequence", "UserName", "Address" };
MyTable = dv.ToTable(true, columnsArray);
}
}