日期:2014-05-18  浏览次数:20811 次

关于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() 的那一些数据