0

私は友人からコードを少し修正しました

しかし、それは最初のレコードのみを表示し、すべてのレコードをループするように操作するにはどうすればよいですか

コードで正解できた人は誰でも報奨金を受け取ることができます

注: DisplayOfficeEquipmentList() データベース上のデータをテキストボックスとコンボボックスに表示するサブです

Public Sub DisplayOfficeEquipmentList()
        Dim sqlconn As New SqlClient.SqlConnection
        sqlconn.ConnectionString = "server = SKPI-APPS1;" & _
        "Database = EOEMS;integrated security=true"

        Dim dt As New DataTable

        sqlconn.Open()
        Dim da As New SqlDataAdapter("SELECT * FROM tblOfficeEquipmentProfile", sqlconn)
        da.Fill(dt)
        cmbCategory.Text = dt.Rows(0)("OE_Category").ToString()
        cmbSubCategory.Text = dt.Rows(0)("OE_SubCategory").ToString()
        txtOEID.Text = dt.Rows(0)("OE_ID").ToString()
        txtName.Text = dt.Rows(0)("OE_Name").ToString()
        txtUser.Text = dt.Rows(0)("OE_User").ToString()
        cmbBrand.Text = dt.Rows(0)("OE_Brand").ToString()
        cmbModel.Text = dt.Rows(0)("OE_Model").ToString()
        txtSpecs.Text = dt.Rows(0)("OE_Specs").ToString()
        txtSerialNo.Text = dt.Rows(0)("OE_SerialNo").ToString()
        txtPropertyNo.Text = dt.Rows(0)("OE_PropertyNo").ToString()
        txtMacAddress.Text = dt.Rows(0)("OE_MacAddress").ToString()
        txtStaticIP.Text = dt.Rows(0)("OE_Static_IP").ToString()
        txtVendor.Text = dt.Rows(0)("OE_Vendor").ToString()
        dtpPurchaseDate.Text = dt.Rows(0)("OE_PurchaseDate").ToString()
        txtWarrantyStatus.Text = dt.Rows(0)("OE_WarrantyStatus").ToString()
        txtWarrantyInclusiveYear.Text = dt.Rows(0)("OE_WarrantyInclusiveYear").ToString()
        txtStatus.Text = dt.Rows(0)("OE_Status").ToString()
        cmbDeptCode.Text = dt.Rows(0)("OE_Dept_Code").ToString()
        cmbLocationCode.Text = dt.Rows(0)("OE_Location_Code").ToString()
        txtRemarks.Text = dt.Rows(0)("OE_Remarks").ToString()
        sqlconn.Close()
    End Sub

Private Sub btnNext_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNext.Click



    Private Sub btnPrevious_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPrevious.Click

    End Sub
4

2 に答える 2

2

行をループする必要があります。インデックス0の行の値を取得しています(1行のみ)。

foreach を使用します。

foreach (System.Data.DataRow row in dt.Rows)
{ 
 //Get values of row
}

編集: vb.net では、次のようになります。

For Each filarow As DataRow In dt.Rows
            Dim OE_ID As String = filarow("OE_ID").ToString
            Dim txtName As String = filarow("OE_NAME").ToString
Next

ちなみに、テキストボックスを埋めているようで、次のループで値が変化します。ListBox のような別のコントロールを使用する必要があるかもしれません

于 2013-05-06T08:43:29.527 に答える
1

データを表示するロジックからデータを取得するロジックを分離する必要があります。まず、データテーブルをロードするメソッドを追加します

Private Function LoadData() as DataTable

    Using sqlconn = New SqlClient.SqlConnection("server = SKPI-APPS1;" & _
                                 "Database = EOEMS;integrated security=true")
        Dim dt As New DataTable
        sqlconn.Open()
        Dim da As New SqlDataAdapter("SELECT * FROM tblOfficeEquipmentProfile", sqlconn)
        da.Fill(dt)
        return dt
    End Using
End Function

次に、ボタンをクリックして、表示するデータテーブルと行番号を DisplayOfficeEquipmentList に渡します

Private Sub btnNext_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNext.Click
     if currentRow + 1 >= dt.Rows.Count Then
        Return
     End if
     currentRow = currentRow + 1
     DisplayOfficeEquipmentList(dt, currentRow)
End Sub

Private Sub btnPrevious_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNext.Click
     if currentRow - 1 < 0 Then
        Return
     End if
     currentRow = currentRow - 1
     DisplayOfficeEquipmentList(dt, currentRow)
End Sub

DisplayOfficeEquipmentList で、ボタン クリックによって渡された行を参照します。

Public Sub DisplayOfficeEquipmentList(ByRef dt as DataTable, ByVal rowNum as INteger)
    Dim row as DataRow
    row = dt.Rows(rowNum)
    cmbCategory.Text = row("OE_Category").ToString()
    cmbSubCategory.Text = row("OE_SubCategory").ToString()
    ....
End Sub

これを機能させるには、フォームを表示するときに LoadData をどこかで呼び出す必要があり (Load イベント?)、currentRow をフォームのグローバル レベル変数として設定する必要があります。

于 2013-05-06T08:42:09.633 に答える