例:已知一条记录的id为123,现在想求出123这条记录在dataset中table中索引值,要用什么函数1,虽然我可以用最土的方法:for int i=1;i<ds.table[0].rows.count;i++再遍历行的ID是不是为123的情况,再返回i的值,但是这样效率比较低2.我想用dataview来取值,但是它的Find只能对排序的字段来查找,比较郁闷
请各位帮忙想想,是不是有更方便的方法

解决方案 »

  1.   

    什么索引值?是不是行号啊?DataTable没有行号的概念
    下面可以简单的找到指定行(假定id值唯一)
    DataRow[] drs = ds.Tables[0].Select("id=123")
    if (drs.Count >0 )
       DataRow CurrentDataRow = drs[0];.....
      

  2.   

    晕死了  ds.Tables[0].Select("id=123");
      

  3.   

    DataRow[] drs = ds.Tables[0].Select("id=123")
    if (drs.Count >0 )
       DataRow CurrentDataRow = drs[0];
    这个是得到id=123这行的数据吧,我要取得这行在整个TABLE中的位置,就是说第几行的行号吧
      

  4.   

    DataRow[] drs = ds.Tables[0].Select("id=123")
    if (drs.Length >0 )
       DataRow CurrentDataRow = drs[0];这样得到的是行里列的数据,我现在要得到的数据是不在记录里面的
    而是Table.Rows[i]中当id=123中的"i"的值
      

  5.   

    DataTab没有行号的概念,楼主难道从VFP转过来的?
      

  6.   

    由于不方便从数据库中再order by 来取得某条记录在数中的排名我现在是用dataview从一个ds中一个表dt中得到order by以后的排名DataView view=new DataView(dt);
    view.Sort=order;
    for (int i=1;i<=view.Table.Rows.Count;i++)
    {
      filedvalue=view.Table.Rows[i-1][filedname];
      view.Sort=order;
      if (filedvalue!=null && filedvalue!=DBNull.Value)
       {
        if (filedvalue.ToString()==findvalue)
         {
    return i;
         }
        }
    }我用for的方法来这里的order by 无论怎么改,它的return i永远是一样的?我用如果用view来绑定datalist倒是顺序不一样??
      

  7.   

    完整的函数是这样的public int findrownum(DataTable dt,string order,string filedname,string findvalue)
    {
    object filedvalue;
    DataView view=new DataView(dt);
    view.Sort=order;
    for (int i=1;i<=view.Table.Rows.Count;i++)
    {
    filedvalue=view.Table.Rows[i-1][filedname];
    view.Sort=order;
    if (filedvalue!=null && filedvalue!=DBNull.Value)
    {
    if (filedvalue.ToString()==findvalue)
    {
    return i;
    }
    }
    }
    return 0;
    }
      

  8.   

    这里在datalist绑定时候的事件的调用private void bind(object sender, System.Web.UI.WebControls.DataListItemEventArgs e)
    {
    string lid=this.DataList1.DataKeys[e.Item.ItemIndex].ToString();

    Label lb;

    lb=(Label)e.Item.FindControl("c_1"); if (lb!=null)
    {
    lb.Text=findrownum(ds.Tables[0],"c1 desc","lid",lid).ToString();
    } lb=(Label)e.Item.FindControl("c_2"); if (lb!=null)
    {
    lb.Text=findrownum(ds.Tables[0],"c2 desc","lid",lid).ToString();
    }
    }