对ds.Tables[0]里的数据进行二次筛选、计算、排序的有关问题

对ds.Tables[0]里的数据进行二次筛选、计算、排序的问题
先看代码:

strSQL = "select b.TeacherName,sum(case b.Satisfaction when 'A' then 1 else 0 end) as best,"
                                        + "sum(case b.Satisfaction when 'B' then 1 else 0 end) as better,"
                                        + "sum(case b.Satisfaction when 'C' then 1 else 0 end) as good "
                                        + "from dc_voteT  as b  where  b.SYSID=" + myData.SYS_ID + " group BY b.TeacherName order by best desc";

            //MessageBox.Show(strSQL);
            cmd = new SqlCommand(strSQL, conn);
            sda.SelectCommand = cmd;
            sda.Fill(ds, "FF");
            progressBar1.Value = 70;
            
            Single numT;   //评价某教师的总人数
            
            for (int i = 0; i < ds.Tables["FF"].Rows.Count; i++)
            {
               wSheet.Cells[i + 13, 1] = ds.Tables["FF"].Rows[i][0].ToString();

               tmp1 = Convert.ToSingle(ds.Tables["FF"].Rows[i][1]);
               tmp2 = Convert.ToSingle(ds.Tables["FF"].Rows[i][2]);
               tmp3 = Convert.ToSingle(ds.Tables["FF"].Rows[i][3]);

               numT = tmp1 + tmp2 + tmp3;

               wSheet.Cells[i + 13, 2] = ds.Tables["FF"].Rows[i][1].ToString();
               wSheet.Cells[i + 13, 4] = ds.Tables["FF"].Rows[i][2].ToString();
               wSheet.Cells[i + 13, 6] = ds.Tables["FF"].Rows[i][3].ToString();

               wSheet.Cells[i + 13, 3] = string.Format("{0:P}", tmp1 / numT);
               wSheet.Cells[i + 13, 5] = string.Format("{0:P}", tmp2 / numT);
               wSheet.Cells[i + 13, 7] = string.Format("{0:P}", tmp3 / numT);

            }


程序的目的是算出每个教师的评价选项与评价该教师的总人数的占比,然后格式化输出到excel
最终效果如下图所示:
对ds.Tables[0]里的数据进行二次筛选、计算、排序的有关问题
现在客户想对“best占比”列按从高到低排序,怎么办?

我想也就是对ds.Tables["FF"]里的数据进行二次筛选、计算、排序的问题,具体代码怎么写呢

------解决方案--------------------
DataView dv = dt.DefaultView;
dv.Sort = "序号";
------解决方案--------------------
请问一下,best占比的计算是不是只有跟本行数据有关?
------解决方案--------------------
dt.DefaultView.sort
datatable也有select方法,可以筛选记录
------解决方案--------------------
直接存储过程 计算出结果 然后再读出来
------解决方案--------------------
直接用select 
------解决方案--------------------
http://www.baidu.com/#wd=datatable%20select&rsv_spt=1&issp=1&rsv_bp=0&ie=utf-8&tn=baiduhome_pg&rsv_sug3=6&rsv_sug4=453&rsv_sug1=6&oq=datata&rsv_sug2=0&f=3&rsp=1&inputT=2948