0

そのため、2 種類の ID があるグリッドから保存する必要があります。LineId & CustId。LineId ごとに複数の CustId が存在する場合があります。データの例は次のようになります。

LineId     CustId
1          33
2          98
7          101
1          51
3          28
7          02
1          35        

行 ID ごとに null で区切られた CustId の文字列を受け入れる保存手順を使用して、コードを保存する必要があります。保存する LineId ごとに 1 回、保存手順を呼び出します。保存手順の仕組みを変更できません。

これまでのところ、ライン ID と顧客 ID を持つタイプ配列にグリッドを追加してきました。

Dim typeRows(gridRows - 1) As Ids 'gridRows is rowcount of grid
For i = 0 To grid.Rows - 1
    typeRows(i).LineId = grid.TextMatrix(i, GridColumns.colLineId)
    typeRows(i).CustId = grid.TextMatrix(i, GridColumns.colCustId)
Next

しかし、私は次に何をすべきかについて少し行き詰まっています。グリッドをソートする必要がありますか? 次に、ソートされたグリッドを調べて、各ライン ID の顧客 ID を組み合わせるにはどうすればよいでしょうか?

ヘルプやガイダンスをいただければ幸いです。

4

1 に答える 1

2

グリッドをソートせずに、配列をループして id が以前に見つかったかどうかを確認する必要があります。これも実行できますが、データのサイズによっては時間がかかる場合があります

'1 form with :
'    1 flexgrid control : name=grid
Option Explicit

Private Type Ids
  LineId As String
  CustId As String
End Type

Private Sub Form_Click()
  'export to delimited string
  Dim intRow As Integer
  Dim intId As Integer
  Dim intBound As Integer
  Dim udtIds() As Ids
  Dim blnThere As Boolean
  Dim intCount As Integer
  With grid
    intBound = .Rows - 1
    ReDim udtIds(intBound) As Ids
    intCount = 0
    For intRow = 1 To intBound
      'loop through all rows
      blnThere = False
      For intId = 0 To intBound
        'check if lineid was already found before
        If udtIds(intId).LineId = .TextMatrix(intRow, 0) Then
          blnThere = True
          Exit For
        End If
      Next intId
      If blnThere Then
        'if lineid was already found before, just add the custid
        udtIds(intId).CustId = udtIds(intId).CustId & "," & .TextMatrix(intRow, 1)
      Else
        'if lineid is new, then create new lineid with custid in udt
        udtIds(intCount).LineId = .TextMatrix(intRow, 0)
        udtIds(intCount).CustId = .TextMatrix(intRow, 1)
        intCount = intCount + 1
      End If
    Next intRow
  End With 'grid
  'now you can save the udt
End Sub

Private Sub Form_Load()
  With grid
    'fill grid with example values
    .Cols = 2
    .Rows = 8
    .FixedRows = 1
    .FixedCols = 0
    .TextMatrix(0, 0) = "LineId"
    .TextMatrix(0, 1) = "CustId"
    .TextMatrix(1, 0) = "1"
    .TextMatrix(2, 0) = "2"
    .TextMatrix(3, 0) = "7"
    .TextMatrix(4, 0) = "1"
    .TextMatrix(5, 0) = "3"
    .TextMatrix(6, 0) = "7"
    .TextMatrix(7, 0) = "1"
    .TextMatrix(1, 1) = "33"
    .TextMatrix(2, 1) = "98"
    .TextMatrix(3, 1) = "101"
    .TextMatrix(4, 1) = "51"
    .TextMatrix(5, 1) = "28"
    .TextMatrix(6, 1) = "02"
    .TextMatrix(7, 1) = "35"
  End With 'grid
End Sub
于 2013-01-08T06:50:20.907 に答える