我想对于datatable做个操作 让datatable的记录数保持在50, 比如dt[1]如果以**开头的去掉
具体业务比这个复杂 个人觉得不是Sql 能搞定的  我用dr.delete 怎么dt.Rows.count值一直不变

解决方案 »

  1.   

    刷新,刷新后dt.Rows.count值就变了
      

  2.   

    写个循环,吧table的数据读一遍
    符合要求的放入新的table,放入50个结束,返回新的table什么逻辑啊sql不能搞定
      

  3.   

    比如一个简单 有个字段 name 数据库一共有500条数据  
    客户只想要30条数据 到页面上
    假设name有3种情况 
    1包含 *
    2包括#
    3都不包括返回结果 希望永远是30条记录 如果第三种情况满足了30条记录 那么1,2不要啦 只要3 ,排在前面的前30条
    如果3 没有30条记录 比如20条 那么取1中的10条 如果不够取2的剩余的 , 够了取前面的 
      

  4.   

    如果你是只要50条记录的话,你可以考虑用DataView来做
    DataView dv=dt.DefaultView();
    dv.filter=""
      

  5.   

    如果你看了上面的逻辑 就会发现 没那么容易filter啊 
    我就想问根本问题 啥时候rows.count会改变 。我搞个新的 add一个row也没有发现rows.count改变啊
      

  6.   

    试试使用下面的方法吧  
       
      public   static   DataTable   CreateTable(DataView   obDataView)  
      {  
      if   (null   ==   obDataView)  
      {  
      throw   new   ArgumentNullException  
      ("DataView",   "Invalid   DataView   object   specified");  
      }  
       
      DataTable   obNewDt   =   obDataView.Table.Clone();  
      int   idx   =   0;  
      string   []   strColNames   =   new   string[obNewDt.Columns.Count];  
      foreach   (DataColumn   col   in   obNewDt.Columns)  
      {  
      strColNames[idx++]   =   col.ColumnName;  
      }  
       
      IEnumerator   viewEnumerator   =   obDataView.GetEnumerator();  
      while   (viewEnumerator.MoveNext())  
      {  
      DataRowView   drv   =   (DataRowView)viewEnumerator.Current;  
      DataRow   dr   =   obNewDt.NewRow();  
      try  
      {  
      foreach   (string   strName   in   strColNames)  
      {  
      dr[strName]   =   drv[strName];  
      }  
      }  
      catch   (Exception   ex)  
      {  
      Trace.WriteLine(ex.Message);  
      }  
      obNewDt.Rows.Add(dr);  
      }  
       
      return   obNewDt;  
      }   
      

  7.   

    为啥 非要sql处理呢 我觉得sql处理太麻烦 至少发3条sql,实际中查询数据都很大的 几百万上千w的数据
    那也慢啊 还不如发一条sql 然后处理datatable
      

  8.   

    我已通过内存中filter和importRow搞定啦 :)