在学生评价老师的评价页面中,有一个GridView,用户显示评价标准,以及依据标准打分。
字段大体是这样的:
         评价项目编号  评价项目内容     分数             最低分  最高分
              001        认真负责  【此处一个下拉列表】    0       5
其中,最大值依评价项目不同而变化,5,10,15不等。 问题1:想在下拉列表显示从0到最高分的选项,是否合理?
问题2:如何取得当前行的行号?因为不同的行,最高分不同。
如果e.Row.RowIndex   代表当前行,Cell[7]是最高分所在的列(Cell[0]是第一列),
为什么语句:
Response.Write(GridView1.Rows[e.Row.RowIndex].Cells[7].Text);
显示错误:索引超出范围。必须为非负值并小于集合大小。
改成
Response.Write(GridView1.Rows[0].Cells[7].Text);也是一样的错误。语句是在以下代码中执行的,
 protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
               if (e.Row.RowType == DataControlRowType.DataRow || e.Row.RowType == DataControlRowType.Separator)
        {
            DropDownList dp = (DropDownList)e.Row.FindControl("DropDownList1");
            //得到了这行的DropDownList,在这里绑定吧
       Response.Write(GridView1.Rows[0].Cells[7].Text);
 
        }
    }

解决方案 »

  1.   

    改正:
    if (e.Row.RowType == DataControlRowType.DataRow || e.Row.RowType == DataControlRowType.Separator) 
    ===》
    if (e.Row.RowType == DataControlRowType.DataRow) 1.合理
      DropDownList dp = (DropDownList)e.Row.FindControl("DropDownList1"); 
      dp.Items.Add("1");
      dp.Items.Add("1");2.e.Row.RowIndex
      

  2.   

    DropDownList dp =e.Row.FindControl("DropDownList1") as DropDownList; 
     dp.Items.Add(new ListItem("",""));
    是否有7列
      

  3.   

    mngzilin谢谢你,每一行的下拉列表的数值范围可能不一样,有0-5的,有0-10的,具体从0到几由最高分的取值来定。
    我怎么样获取不同行的最高分值呢?
      

  4.   

    还有,GridView有13行,8列,
    执行Response.Write(e.Row.RowIndex.ToString());
    输出
    0123456789101112
    我该怎样取出每一行第8列的值(最高分)然后把从0到最高分加入下拉列表呢?
      

  5.   

    DropDownList dp = (DropDownList)e.Row.FindControl("DropDownList1"); 
    int Num=Convert.ToInt32(GridView1.Rows[e.Row.RowIndex].Cells["最高分的字段名"].Text);
    for(int i=Num;i>=0;i++)
      dp.Items.Add(i.ToString(),i.ToString()); 
      

  6.   

    int Num=Convert.ToInt32(e.Row.Cells["最高分的字段名"].Text);
      

  7.   

    然后我又这样写,以测试能否取出第一行的最高分“5”,但是显示错误:索引超出范围。必须为非负值并小于集合大小。string sss = this.GridView1.Rows[0].Cells[7].Text;Response.Write(e.Row.RowIndex.ToString());
    哪里出错了呢?
      

  8.   

    经过多次尝试,终于成功了,谢谢海风的提示!               int Num = Convert.ToInt32(e.Row.Cells[7].Text);
               
                       
                       for (int i = Num; i >= 0; i--)
                    dp.Items.Add(new ListItem(i.ToString(), i.ToString()));