0

我收到一个错误:索引超出范围。必须为非负数且小于集合的大小。\r\n参数名称: 下面执行我的代码 gvGrid.Columns.RemoveAt(0) 时的索引。这里缺少什么?

gvGrid.DataSource = eCustomerMgr.GetCustHistory(oCust);
gvGrid.DataBind();  
gvGrid.Columns.RemoveAt(0);  

该代码块用于将数据导出到 Excel。

更新:使用@Lajos Arpad 的建议,这就是我所看到的:

在此处输入图像描述

但是,当我将鼠标悬停在 gvGrid.Columns.Count 上时,我得到 0

在此处输入图像描述

为什么网格数显示为 0 ?

4

7 回答 7

3

我不知道为什么 Columns.Count 显示 0,但如果您对替代方案感兴趣,也许您可​​以尝试gvGrid.HeaderRow.Cells[0].Visible = false;0 是您要删除的列 # 的位置。希望这可以帮助。

于 2012-08-03T00:53:53.603 回答
1

在绑定之前先绑定,然后删除或删除数据源的列

gvGrid.DataSource = eCustomerMgr.GetCustHistory(oCust);
gvGrid.DataBind();  
gvGrid.Columns.RemoveAt(0);

在将列绑定到网格之前删除列,假设您有数据表

   DataTable t;
   t.Columns.Remove("columnName");
   t.Columns.RemoveAt(columnIndex);
于 2012-08-01T16:09:02.707 回答
1
gvGrid.DataSource = eCustomerMgr.GetCustHistory(oCust);
gvGrid.DataBind();  
if (gvGrid.Columns.Count > 0)
{
    gvGrid.Columns.RemoveAt(0);
}
于 2012-08-01T16:32:16.130 回答
0

如果您确定数据,则首先是 DataBind,然后是 RemoveAt。

于 2012-08-01T16:09:40.320 回答
0

首先确保eCustomerMgr.GetCustHistory(oCust);在删除列之前返回数据并绑定网格..

于 2012-08-01T16:12:02.480 回答
0

首先确保您已经完成 AutoGenerateColumns="False"并定义了列名。

如果要动态删除列,则必须预定义列名称。例如。

  <Columns>
            <asp:BoundField DataField="Name" />
            <asp:BoundField DataField="Address" />
        </Columns> 

现在,当您删除零列时,它将删除该列。

于 2012-08-03T17:50:15.783 回答
0
 if (gvGrid.Rows.Count > 0) {

  gvGrid.HeaderRow.Cells[0].Visible = false;

  for (int i = 0; i < gvGrid.Rows.Count; i++) {
   gvGrid.Rows[i].Cells[0].Visible = false;

  }
 }
于 2018-06-06T07:02:50.697 回答