首页 > 开发 > 综合 > 正文

Visual C#中灵活使用DataView

2024-07-21 02:26:47
字体:
来源:转载
供稿:网友


可能大家都知道dataview这个名词的概念,但也许不是很多人可以说清楚在.net架构中它的应用范围和程度。比如:究竟datagrid和repeater这些控件是如何和数据关联起来的?很多人会告诉我是通过dataset。这显然是正确的,但究竟最根本最直接的是通过什么联系起来的呢?

  答案就是dataview。其实下面的语句:

  

  datagridtc.datasource = dtrst;

  datagridtc.databind();

    在工作的时候,它等效于:

  

  datagridtc.datasource = ds.tables[0].defaultview;

  datagridtc.databind();

    dataset都是通过数据视图将数据呈现在控件上面的。那如何才能做到物尽其用呢?如果通过灵活地使用dataview让我们的程序更简洁,性能更好呢?下面通过一个例子来说明:一段程序想实现将dataset已有的一个datatable重新排序。

  

 


  某个写法是:

  

  dt = ds.tables[0].copy();

   dt.clear();

  

   int intnewid = 0;

   for(int inti = 0;inti < ds.tables[0].rows.count;inti++)

   {

   dr = dt.newrow();

   dr["datetype"] = ds.tables[0].rows[inti - 1 + 1]["datetype"].tostring();

   dr["tcorder"] = ds.tables[0].rows[inti - 1 + 1]["tcorder"].tostring();

   dr["timeclass_id"] = intnewid;

   dr["timeclass_name"] = ds.tables[0].rows[inti - 1 + 1]["timeclass_name"].tostring();

   dr["chn_namelocal"] = ds.tables[0].rows[inti - 1 + 1]["chn_namelocal"].tostring();

   dr["user_name"] = ds.tables[0].rows[inti - 1 + 1]["user_name"].tostring();

   dr["user_id"] = ds.tables[0].rows[inti - 1 + 1]["user_id"].tostring();

   dt.rows.add(dr);

   dt.acceptchanges();

   intnewid++;

   }

  

   dtrst = dt.copy();

   dtrst.clear();

   foundrow = dt.select("1 = 1", "timeclass_name, datetype, tcorder");

   for(int inti = 0;inti < foundrow.length;inti++)

   {

   dr = dtrst.newrow();

   dr["datetype"] = foundrow[inti]["datetype"].tostring();

   dr["tcorder"] = foundrow[inti]["tcorder"].tostring();

   dr["timeclass_id"] = foundrow[inti]["timeclass_id"].tostring();

   dr["timeclass_name"] = foundrow[inti]["timeclass_name"].tostring();

   dr["chn_namelocal"] = foundrow[inti]["chn_namelocal"].tostring();

   dr["user_name"] = foundrow[inti]["user_name"].tostring();

   dr["user_id"] = foundrow[inti]["user_id"].tostring();

   dtrst.rows.add(dr);

   dtrst.acceptchanges();

   }

  

   datagridtc.datasource = dtrst;

   datagridtc.databind();

    另外一个写法是:

  

  dataview dv = ds.tables[0].defaultview;

   dv.sort = "timeclass_name, datetype, tcorder";

   datagridtc.datasource = dv;

   datagridtc.databind();

    显然方法二从代码上就简洁多了,更重要的是它不要再新创建dataset等,减少了内存和cpu的消耗。

  因此大家在遇到需要排序或者过滤数据的时候,要多想想可否使用dataview来实现了。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表