【问题标题】:Error: Index was out of range. Must be non-negative and less than the size of the collection错误:索引超出范围。必须是非负数且小于集合的大小
【发布时间】:2015-06-16 08:56:52
【问题描述】:

我正在从数据库中检索数据到 gridview textbox 数据库中有两行但无法获取:

    string sr_no;
    int rowIndex = 0;

            for (int i = 1; i <= dt1.Rows.Count; i++)
            {
                //extract the TextBox values
                TextBox box1 = (TextBox)Gridview1.Rows[rowIndex].Cells[1].FindControl("TextBox1");
                TextBox box2 = (TextBox)Gridview1.Rows[rowIndex].Cells[2].FindControl("TextBox2");
                TextBox box3 = (TextBox)Gridview1.Rows[rowIndex].Cells[3].FindControl("TextBox3");
                TextBox box4 = (TextBox)Gridview1.Rows[rowIndex].Cells[4].FindControl("TextBox4");
                TextBox box5 = (TextBox)Gridview1.Rows[rowIndex].Cells[5].FindControl("TextBox5");
                TextBox box6 = (TextBox)Gridview1.Rows[rowIndex].Cells[6].FindControl("TextBox6");
                TextBox box7 = (TextBox)Gridview1.Rows[rowIndex].Cells[7].FindControl("TextBox7");
                TextBox box8 = (TextBox)Gridview1.Rows[rowIndex].Cells[8].FindControl("TextBox8");

                box1.Text = dt1.Rows[i-1]["RD_PS_APPLab_Parameter"].ToString();
                sr_no = dt1.Rows[i-1]["RD_SR_No"].ToString();
                box2.Text = dt1.Rows[i-1]["Test"].ToString();
                box3.Text = dt1.Rows[i-1]["Test_Condition"].ToString();
                box4.Text = dt1.Rows[i-1]["Method"].ToString();
                box5.Text = dt1.Rows[i-1]["CTQ"].ToString();
                box6.Text = dt1.Rows[i-1]["Specification_RD_PS_AppLab"].ToString();
                box7.Text = dt1.Rows[i-1]["UOM"].ToString();
                box8.Text = dt1.Rows[i-1]["Remarks"].ToString();
                rowIndex++;
            }

我遇到了错误

错误:索引超出范围。必须是非负数且小于 集合的大小

【问题讨论】:

  • 你的行有 9 个单元格吗?你研究了什么来解决你的问题?
  • 您的视图是否比行数多 1 行?第0行是什么?到底是什么在网格视图中创建行?
  • 是的,每行有 9 个单元格
  • 我的其他评论呢?阅读How to Ask
  • 如果我猜的话,Gridview1 的行数少于 dt1。您需要使用调试器逐步完成此操作,并查看它在何处引发异常并调查原因。没有什么“明显”的错误。

标签: c# asp.net gridview


【解决方案1】:

那里有两个概率

1) 你的网格没有 8 个单元格

2)您的for loop 不正确 而不是

for (int i = 1; i <= dt1.Rows.Count; i++)
            {
//...
}

试试这个

for (int i = 1; i < dt1.Rows.Count; i++)
            {
/..
}

注意,如果你的总线逻辑,你应该从 0 开始循环

所以你的for循环会是这样的

for (int i = 0; i < dt1.Rows.Count; i++)
                {
    /..
    }

【讨论】:

  • 为什么要从一个开始?
  • 我认为这是他的逻辑:)
  • @daveL - 操作引用dt1.Rows[i-1]
  • 由于问题到处使用i-1,您的修改肯定会导致最后一行被遗漏吗?我很欣赏它看起来很奇怪,但我认为这不是问题。
  • sn-p 看起来像 .DataBind() 的错误做法。仅此而已。
猜你喜欢
  • 2019-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-20
相关资源
最近更新 更多