2012-08-01 25 views
0

我收到一個錯誤:索引超出範圍。必須是非負數,並小於集合的大小。\ r \ n參數名稱:索引當我的代碼gvGrid.Columns.RemoveAt(0)在下面執行時。這裏錯過了什麼?在asp.net中調用gridview.Columns.RemoveAt時出錯

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

該代碼塊用於將數據導出到excel。

更新:使用@Lajos茨的建議,這是我所看到的:

enter image description here

然而,當我將鼠標懸停在gvGrid.Columns.Count,我得到0

enter image description here

爲什麼網格數顯示爲0?

回答

3

我不知道爲什麼Columns.Count正顯示出0,但如果你有興趣的替代,也許你可以嘗試gvGrid.HeaderRow.Cells[0].Visible = false;其中0是你想要刪除的列#。希望這可以幫助。

+0

謝謝。這將現在工作。 – DotNetRookie 2012-08-04 19:22:08

1

先綁定,然後刪除或數據源中刪除列綁定之前

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

將其綁定你之前刪除列的網格,假設你有數據表

DataTable t; 
    t.Columns.Remove("columnName"); 
    t.Columns.RemoveAt(columnIndex); 
+0

沒有運氣...同樣的錯誤.. – DotNetRookie 2012-08-01 16:10:23

+0

的eCustomerMgr.GetCustHistory(oCust)分配到的一些數據表和檢查,如果你得到的數據或類似數據表DT = eCustomerMgr.GetCustHistory單純的列名空數據表(oCust );獲取像dt.Columns.Count這樣的dt列,以確保獲得列。 – Adil 2012-08-01 16:26:12

0

如果你是肯定數據,然後先DataBind然後RemoveAt。

+1

這應該是一條評論。 – dtsg 2012-08-01 16:14:00

+1

真的爲什麼downvote?我想我們是在同一時間寫的。 – PepeDeLew 2012-08-01 16:16:50

0

首先確保eCustomerMgr.GetCustHistory(oCust);被列刪除之前返回數據,並結合電網..

1
gvGrid.DataSource = eCustomerMgr.GetCustHistory(oCust); 
gvGrid.DataBind(); 
if (gvGrid.Columns.Count > 0) 
{ 
    gvGrid.Columns.RemoveAt(0); 
} 
0

首先確保您已完成AutoGenerateColumns="False"並定義了柱的名稱。

如果要動態刪除列,則必須預定義列名稱。 如前所述。

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

現在,當您刪除列零時,它將刪除該列。

+0

@DotNetRookie絕對你的網格有autogeneratecolumn屬性是真實的,你是綁定在viewstate中可用的整個日期。 – 2012-08-03 17:53:15