0

所以我必须从有两种类型 ID 的网格中保存。线路 ID 和客户 ID。每个 LineId 可以有多个 CustId。数据示例如下:

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

我需要使用一个保存过程来保存代码,该过程接受每个 Line id 的以 null 分隔的 CustIds 字符串。我为每个要保存的 LineId 调用一次保存过程。我无法更改保存过程的工作方式。

到目前为止,我一直在将网格添加到具有 line id 和 cust 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

但我有点坚持下一步应该做什么。我应该对网格进行排序吗?那么我将如何通过排序网格并为每个 lineid 组合 cust 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 回答