【问题标题】:unable to figure out index out of range exception无法找出索引超出范围异常
【发布时间】:2018-03-02 18:09:32
【问题描述】:

我正在构建如下这样的数据表,当我尝试逐行为数据库分配值时,我遇到了这样的错误

位置 0 处没有行

这是我的代码:

    public DataTable BuildCertInfo()
    {
        DataTable dtCertInfo = new DataTable(TABLE);
        DataColumnCollection columns;
        columns = dtCertInfo.Columns;

        AddColumn(dtCertInfo, ROW_NO, "System.Int32", false, 0);
        AddColumn(dtCertInfo, LIC_ID, "System.Int32", false, 0);
        AddColumn(dtCertInfo, SYS_ID, "System.Int32", false, 0);

         AddColumnString(dtCertInfo, SYS_PART_ID);
         ...............
         ...............
          return dtCertInfo;
    }

我正在像这样调用上面的方法

  DataTable dt = objCertificate.BuildCertInfo();

然后我正在遍历gridview并将值分配给数据表,如下所示..

 for (int i = 0; i < gvPRCertInfo.Rows.Count; i++)
 {

     dt.Rows[i][Certificate.SYS_PART_ID] = systemPartID; // here I am getting error
     ................
     ................
  }

我不确定我在哪里做错了,请指出正确的方向,非常感谢我

非常感谢提前...

【问题讨论】:

  • 您确定dt.Rows 有足够的行来覆盖i 的范围吗?
  • 看起来您正试图用 for 循环的行填充 dt。如果是这种情况,您需要先创建一个新行并将其添加到dt
  • 应该是:dt.Rows.Count(不是gvPRCertInfo)?

标签: c# asp.net .net datatable


【解决方案1】:

您没有创建任何行,这就是您收到错误的原因。试试这样的:

for (int i = 0; i < gvPRCertInfo.Rows.Count; i++)
{
    dt.Rows.Add(dt.NewRow());
    dt.Rows[i][Certificate.SYS_PART_ID] = systemPartID;
    ....
}

【讨论】:

    猜你喜欢
    • 2011-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-25
    • 2023-04-10
    相关资源
    最近更新 更多