2012-10-05 70 views
-1

我有我想轉換成一個DataTable一個GridView。我無法將GridView的DataSource用於此DataTable。我發現下面的方法是最常見的方式使用最多來解決這個任務,但由於某些原因,下面的方法不斷拋出的「找不到列0」的IndexOutOfRangeException。下面的代碼:爲什麼這個方法找不到這個GridViewDataRow的列?

DataSet ds = new DataSet("Student"); 
    DataTable dt = new DataTable(String.Format("{0}For{1}", gv.ID.Substring(2, gv.ID.Length - 2), year)); 
    for (int j = 0; j < gv.Rows.Count; j++) 
    { 
     DataRow dr; 
     GridViewRow row = gv.Rows[j]; 
     dr = dt.NewRow(); 
     for (int i = 0; i < row.Cells.Count; i++) 
     { 
      dr[i] = row.Cells[i].Text; //***EXCEPTION IS THROWN HERE*** 
     } 
     dt.Rows.Add(dr); 
    } 
    ds.Tables.Add(dt); 

每行有18個細胞。

在此先感謝您的幫助。

解決方案 我把CptSupermrkt的建議,之前只是第一個「for」循環實現了這個代碼,且該方法繼續W/O拋出異常:

DataColumn dc; 
    foreach (var item in gv.Columns) 
    { 
     dc = new DataColumn(item.ToString()); 
     dt.Columns.Add(dc); 
    } 
+0

如果顯示GridView控件 –

+3

ASPX代碼當你說DR = dt.NewRow(),你已經宣佈DT作爲一個DataTable以上,但不列這將是有益的。所以,當你說dr = dt.NewRow(),然後dr [0]時,沒有列0.至少這是我的第一印象。您可以通過像DataColumn col1 = new DataColumn(「Column 1」); dt.Columns.Add(COL1); – CptSupermrkt

回答

1

你定義沒有定義以及任何列的數據表,讓你從dt.NewRow得到(行)沒有列。因此,嘗試訪問列的索引不起作用。

我想你需要你創建具有相同的列,你的GridView的數據表。

DataTable dt = new DataTable(String.Format("{0}For{1}", gv.ID.Substring(2, gv.ID.Length - 2), year)); 

DataColumn idCol = new DataColumn("ID"); 
DataColumn nameCol = new DataColumn("Name"); 
//etc. 

dt.Columns.Add(idCol); 
dt.Columns.Add(nameCol); 
//etc. 

然後,當你在數據表創建使用NEWROW(),該行將有列,當你試圖在你的代碼的其餘部分做你可以訪問它們。

+0

謝謝。那就是訣竅。 – Bazinga

0

看起來這是博士[我]導致問題。新創建的DataRow博士沒有列0。

相關問題