2012-01-10 49 views
0

添加下面是我的代碼不能DataTable中值的GridView

Dim dt As DataTable = New DataTable("Intervenant") 
    For Each column As DataControlField In grdvIntervenants.Columns 
     dt.Columns.Add(New DataColumn(column.HeaderText)) 
    Next 

    Dim dr As DataRow 
    For Each row As GridViewRow In grdvIntervenants.Rows 
     dr = dt.NewRow() 
     dr.Item(0) = row.Cells(0) 
     dr.Item(1) = row.Cells(1) 
     dr.Item(2) = row.Cells(2) 
     dr.Item(3) = row.Cells(3) 
     dr.Item(4) = row.Cells(4) 
     dr.Item(5) = row.Cells(5) 
     dt.Rows.Add(dr) 
    Next 

    'add new intervenant 
    dr = dt.NewRow() 

    dr.Item(0) = Nom 
    dr.Item(1) = Prenom 
    dr.Item(2) = Courriel 
    dr.Item(3) = False 
    dr.Item(4) = True 
    dr.Item(5) = IdIntervenant 

    dt.Rows.Add(dr) 


    grdvIntervenants.DataSource = dt 
    grdvIntervenants.DataBind() 

我使用VB.NET作爲後臺代碼在ASP.NET開發。我在vs2008與Windows 7企業版(如果該信息是任何幫助)

我剛剛重新開始做VB.Net和我第一次使用沒有數據庫的gridview,所以也許我失去了一些東西。基本上,我試圖向DataTable(dt)添加一個DataRow(dr),然後將所述DataTable放入一個Gridview(grdvIntervenants)中。

我的第一步是採取gridview並將其所有數據放入一個DataTable。然後我創建一個DataRow(dr),我用變量填充,然後將所述DataRow添加到DataTable中。之後,我將DataTable作爲DataSource並綁定GridView。

問題是,我的GridView顯示的行,但他們是空的。 調試時,我發現這個錯誤是身邊所有的DataRow.Item「爲了評估索引屬性,該屬性必須是合格的,參數必須由用戶明確提供」 Seraching爲它在網上,我發現這是一個問題,有時發生在vb用戶,但我無法找到任何解決方案,我的問題。

我並沒有完全理解錯誤,所以我嘗試了很多不同的方法將數據添加到DataRow中,但無濟於事。我也嘗試了不同的方式來添加列,認爲索引問題可能來自那裏,但問題仍然存在。現在,我發現奇怪的是,我的DataRow的Item屬性給出了帶引號的錯誤,但我將這些值看到DataRow的ItemArray中。

我還發現在dataTable的columns屬性旁邊會出現相同的錯誤。

當我嘗試從數據源訪問使用DataBinder我的RowDataBound方法的數據,這讓我空結果...

所以我的問題是:什麼我失蹤?

+1

這是沒有意義的。首先,你從網格中的數據創建一個數據表,然後用數據表填充網格? – 2012-01-10 21:16:57

+0

你應該真的顯示GridView的aspx標記。順便說一句,如果你打算啓用分頁,你應該重新考慮你的方法(即查詢數據源),因爲GridView.Rows只返回當前頁面的行。 – 2012-01-10 22:17:04

+0

@ subt13,我從網格中的數據創建一個數據表,將一行添加到我創建的數據表中,然後將現在有一行的數據表放入網格中,基本上,向網格添加一行 – 2012-01-11 13:11:38

回答

0

您的問題很可能是您使用HeaderText作爲數據表的列名稱,但這可能不正確。

您應該測試每個列是否爲BoundField,如果是,則使用BoundField.DataField作爲DataTable的列名稱。

例如:

For Each column As DataControlField In GridView1.Columns 
     If TypeOf column Is BoundField Then 
      dt.Columns.Add(New DataColumn(DirectCast(column, BoundField).DataField)) 
     End If 
    Next 
+0

它可能因爲我使用標題文本 因爲我不想在這個問題上損失更多時間,所以我手動將列創建到數據表中,而不是動態創建它們,現在GridView顯示結果。 – 2012-01-11 13:39:44