0

こんにちは、ループ中にモデル番号の一部をデータベースから am 配列に追加する方法を見つけようとしています。

これは私のコードです:

objCmd = New MySqlCommand(strSQL, objConn)
dtReader = objCmd.ExecuteReader()

If dtReader.HasRows() Then
   grdViewItems.DataSource = dtReader
   grdViewItems.DataBind()

   Dim arrayOfItems As String() = New String() {}

   While dtReader.Read()
        arrayOfItems(intX) = dtReader.GetString("model_number")
        'arrayItems(intX) = dtReader.GetString("model_number")
        intX += 1
   End While

   'Session.Add("arrayOfItems", arrayItems)
   Session("arrayOfItems") = arrayOfItems

   dtReader.Close()
   dtReader = Nothing
   objConn.Close()
   objConn = Nothing
End If

問題は、配列に値が入力されないことです(ただし、whileループで値の読み取りをスキップするため、値はグリッドビューに存在します.

私はここで間違って何をしていますか?

完全なコード

Dim intX As Integer = 0

    objConn = New MySqlConnection(product.strConnString)
    objConn.Open()

    strSQL = "SELECT prod.id, PP.model_number, description, price, price_new, price_direct, price_builder " & _
             "FROM product as prod " & _
                "INNER JOIN product_price as PP ON PP.product_id = prod.type " & _
             "WHERE prod.id = " & pageID & ";"

    Try
        objCmd = New MySqlCommand(strSQL, objConn)
        dtReader = objCmd.ExecuteReader()

        If dtReader.HasRows() Then
            grdViewItems.DataSource = dtReader
            grdViewItems.DataBind()

            Dim arrayOfItems As New List(Of String)()

            For Each row As GridViewRow In grdViewItems.Rows
                arrayOfItems(intX) = row.Cells(0).Text.ToString
                intX = intX + 1
            Next

            MsgBox(arrayOfItems(0))

            'Session.Add("arrayOfItems", arrayItems)
            Session("arrayOfItems") = arrayOfItems

            dtReader.Close()
            dtReader = Nothing
            objConn.Close()
            objConn = Nothing
        End If
    Catch ex As Exception
        MsgBox("LoadProductItems: " & ex.Message)
    End Try
4

2 に答える 2

0

問題はあなたのループにあるようです。次のコードを置き換えます

Do While dtReader.Read
   arrayOfItems(intX) = dtReader.GetString("model_number")
   intX += 1
Loop

'with this code
While dtReader.Read()
     arrayOfItems(intX) = dtReader.GetString("model_number")
     intX += 1
End While

更新された回答: gridview にデータを割り当てると、データを次のようにデータテーブルに保存することもできます

Dim dt As DataTable = New DataTable
dt = dtReader

`Then get the data from the table
Dim i As Integer = 0
Do While (i < dt.Rows.Count)
dt.Rows(i)("COlumnName").ToString
i = (i + 1)
Loop

再度更新され た回答: グリッドビューからデータを読み取る

For Each row As GridViewRow In grdViewItems.Rows
   arrayOfItems(intX) = row.Cells(0).Text.ToString ` in cell specify the index of the model_number column
   intX = intX + 1
Next
于 2012-08-10T13:23:20.917 に答える
0

Instead of array, I would recommend using List of int or string

于 2012-08-09T20:32:19.310 に答える