2012-09-09 36 views
0

下面是我試圖用來從GridViewRow中將值傳入DataRow對象(使用Visual Basic的神話語言)的循環。然而,在這條線:在Visual Basic中將GridViewRow數據導入DataRow

   dr(i) = r.Cells(i).Text 

我不斷收到以下錯誤信息:

the value of type string cannot be converted to system.data.datarow 

有人能指出我如何做到這一點正確的方向?

 Dim rows As New List(Of GridViewRow)() 

     For Each item As GridViewRow In grdExpProd.Rows 
      rows.Add(item) 
     Next 

     Dim value As Integer = rows.Count 

     Dim dt As New DataTable() 


     For index As Integer = value - 1 To 0 Step -1 
      Dim dr As DataRow() 
      Dim r As GridViewRow = rows(index) 

      For i As Integer = 0 To r.Cells.Count - 1 
       dr(i) = r.Cells(i).Text 
      Next 

      dt.Rows.Add(dr) 
     Next 

回答

1

我相信你需要將你的文本添加到DataRows Item Property這將允許你訪問DataRow的單個單元格。您還需要將GridRowView中存在的列添加到新的DataTable

For i = 1 To rows(0).Cells.Count 
    dt.Columns.Add("Header" & i) 
Next 

For index As Integer = value - 1 To 0 Step -1 
    Dim dr As DataRow = dt.NewRow() 
    Dim r As GridViewRow = rows(index) 

    For i As Integer = 0 To r.Cells.Count 
     dr.Item(i) = r.Cells(i).Text 
    Next 

    dt.Rows.Add(dr) 
Next 
+0

Item屬性y應該被當作索引器,所以你不需要用名字來引用它;博士(i)應該足夠了。 – ekolis

+0

@ekolis你是對的,我只是這樣做,以澄清它是類似於GridViewRow的列。 –

0

您意外創建了dr作爲DataRow對象的數組,而不是作爲單個DataRow對象。試着用

Dim dr As New DataRow() 
+0

糟糕。然而,這帶來了一個新的錯誤,說博士「在這方面是不可訪問的,因爲它是'Protected.Friend' – NealR

+0

嗯。不知道爲什麼你的數據行變量會被保護的朋友,當你只是宣佈它作爲一個局部變量,或者你在說構造函數?另一個海報建議使用dt.NewRow();也許這就是你應該如何創建一個數據行? – ekolis

0

更換

Dim dr As DataRow() 

嘗試用

Dim dr As DataRow = dt.NewRow() 

而且更換

Dim dr As DataRow() 

,作爲另一個海報指出的那樣,你需要在你的數據來創建列表之前試圖向它添加行。

+0

這允許代碼編譯,但是這一行:dr(i )= r.Cells(i).Text在循環的第一次迭代中拋出一個錯誤,它在dr的索引0處找不到列,有關如何解決這個問題的任何想法?看起來這是要走的路我希望) – NealR

+0

@NealR啊,我知道,你的表沒有任何列!因此,該行沒有項目,你需要創建並添加DataColumn對象到DataTable Columns集合,然後再嘗試創建新的行。 –