关于datatable和datatable.Copy().DefaultView.ToTable的不同怎么理解/?
先代码:
if (!IsPostBack)
{
DataTable dt = Xml.XmlToDataTable("Xml/menu.xml");//读取xml到datatable中
DataTable dtType = dt.Copy().DefaultView.ToTable(true, "type");//选择DataTable等数据源中的唯一值
dlType.DataSource = dtType;
dlType.DataBind();
foreach (DataListItem di in this.dlType.Items)//datalistitem 引用变量 不可操作!this.dltype.item 数据表的项可操作
{
Label lblType = di.FindControl("lblType") as Label;
DataList dlDetail = di.FindControl("dlDetail") as DataList;
DataView dv = dt.Copy().DefaultView;
dv.RowFilter = "type='" + lblType.Text.Trim() + "'";
dv.Sort = "name asc";
dlDetail.DataSource = dv;
dlDetail.DataBind();
}
这是pageload的代码,红色标记的两个datatable有什么不用 下面粉红色的又是什么意思呢?
------解决方案--------------------
dtType是只返回dt的"type"那一列而已,就是说第二个table得到的是一个新的DataTable,这个DateTable只包含dt的“type”这一列的数据。
Label lblType = di.FindControl("lblType") as Label;// 找到lblType并委婉转换为Label控件
DataList dlDetail = di.FindControl("dlDetail") as DataList;// 找到dlDetail并委婉转换为DataList控件
DataView dv = dt.Copy().DefaultView;// 拷贝dt,并返回副本的DefaultView
dv.RowFilter = "type='" + lblType.Text.Trim() + "'";// 筛选dv里的数据,只取type这一字段等于lblType这个Label控件的文本内容(去掉前面空格),说白了就是筛选type等于lblType.Text.Trim() 的那一些数据