2

それぞれが希望の重みを持つ一連の注文と、それぞれが重みを持つ一連のトルコがあり、すべてデータベースとデータセットに含まれていますが、オブジェクトを介してアクセスされます(これにより複雑になりますが、オブジェクトは増加しますプロジェクトの複雑さ。それが良い考えだからではありません)。

それらを一致させてから、データベースとデータセットを更新するにはどうすればよいですか?リストとLINQでそれを実行しようとしていますが、うまく機能していません。残念ながら、どこが間違っているのかわかりません。編集:行 For Count = 0 To Max - 1 Orders.UpdateOrder(Count, Count + 1, Orders.OrderDetail(Count, "CustomerID"), TurkeyList(Count)(0), Orders.OrderDetail(Count, "ApproxWeight")) Nextに範囲外のインデックスエラーがあります。これが何を意味するのかはわかりますが、なぜそれを取得しているのか、そしてそれを修正する方法がわかりません。

私は自分の調査を行いました-実際、私の現在の試みはリストを使用しています(StackOverflowでこれに使用できることを読むまで聞いたことはありませんでした)が、tbh、これは私が教えられたことではありません、そして私はいくつかのガイダンスを使用することができます。私はもともと2次元配列を使ってみましたが、うまくいきませんでした。私は現在の実装が機能するはずだと思います-ですから、私が愚かな何かを見逃している可能性は十分にあります。以下は私のコードの関連部分です。

Imports System.Linq
# <summary>
#  SortForm is a public class which handles the events and controls of a single form.
#  </summary>
#  <remarks></remarks>
Public Class SortForm
    Dim Turkeys As New TurkeyDBInteract
    Dim Orders As New OrderDBInteract
    Dim Customers As New CustomerDBInteract
    Public TurkeyList As New List(Of Integer())
    Public OrderList As New List(Of Integer())
    #  <summary>
    #  The FillLists subroutine fills the two lists with data from the dataset.
    #  </summary>
    #  <remarks></remarks>
    Public Sub FillLists()
        For Count = 0 To Orders.OrderNum - 1
            OrderList.Add(New Integer() {Count, Orders.OrderDetail(Count, "ApproxWeight")})
        Next
        For Count = 0 To Turkeys.TurkeyNum - 1
            TurkeyList.Add(New Integer() {Count, Turkeys.TurkeyDetail(Count, "Weight")})
        Next
    End Sub
    #  <summary>
    #  The SortList subroutine takes a List of 1-dimensional integer and sorts it using LINQ to Objects.
    #  </summary>
    #  <param name="List"></param>
    #  <remarks></remarks>
    Public Sub SortList(ByRef List As List(Of Integer()))
        Dim SortedList As New List(Of Integer())
        SortedList = List.OrderBy(Function(Weight) Weight(1)).ToList()
        List = SortedList
    End Sub
    #  <summary>
    #  This is the SortButton click event. This calls the <see cref="FillLists"/> and <see cref="SortList"/> subroutines to process order and turkey data, then matches the lists and uses this to update the dataset and database.
    #  </summary>
    #  <param name="sender"></param>
    #  <param name="e"></param>
    #  <remarks></remarks>
    Private Sub SortButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SortButton.Click
        FillLists()
        SortList(TurkeyList)
        SortList(OrderList)
        Dim Max As Integer
        If TurkeyList.Count > OrderList.Count Then
            Max = OrderList.Count
        Else
            Max = TurkeyList.Count
        End If
        For Count = 0 To Max - 1
            Orders.UpdateOrder(Count, Count + 1, Orders.OrderDetail(Count, "CustomerID"), TurkeyList(Count)(0), Orders.OrderDetail(Count, "ApproxWeight"))
        Next
   End Sub
End Class

OrderDBInteractクラスのOrderUpdateメソッドのコードは次のとおりです

    # <summary>
    # Subroutine UpdateOrder updates every value of a specific record of the OrderTbl dataset table and then updates the database.
    # </summary>
    # <param name="Row">Row passes the row of the record to be updated.</param>
    # <param name="OrderID">OrderID passes the new primary key value of the record to be updated.</param>
    # <param name="CustomerID">CustomerID passes the new foreign key field value of the record to be updated.</param>
    # <param name="ApproxWeight">ApproxWeight passes a new field value of the record to be updated.</param>
    # <remarks></remarks>
    Public Sub UpdateOrder(ByVal Row, ByVal OrderID, ByVal CustomerID, ByVal TurkeyID, ByVal ApproxWeight)
        Data.Tables("OrderTbl").Rows(Row).Item("OrderID") = OrderID
        Data.Tables("OrderTbl").Rows(Row).Item("CustomerID") = CustomerID
        Data.Tables("OrderTbl").Rows(Row).Item("TurkeyID") = TurkeyID
        Data.Tables("OrderTbl").Rows(Row).Item("ApproxWeight") = ApproxWeight
    End Sub
4

1 に答える 1

1

キーに従って値をソートするソートリストを試してください。例えば:

Dim OrderList As New SortedList
    For Count = 0 To Orders.OrderNum - 1
        OrderList.Add(Orders.OrderDetail(Count, "ApproxWeight"), Count)
    Next

Orders.OrderDetailの結果に従って値(カウント)を並べ替えます。そうすれば、SortListメソッドを呼び出す必要はありません。

しかし、これは

Data.Tables("OrderTbl").Rows(Row).Item("OrderID") = OrderID

データセットのテーブルの行のOrderID列の値を変更しますが、これらの変更はデータベースにコミットされません。 データベースへのデータの保存に関するこのmsdnウォークスルーをご覧ください。基本的に、データセットからの変更でデータベーステーブルを更新するには、適切なUpdateCommandセットアップを備えたDataAdapterが必要です。プログラムで型付きデータセットを使用している場合は、データベースへの変更のコミットがより簡単なタスクになります。

于 2013-02-28T00:55:38.690 に答える