⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 frmcross.frm

📁 金算盘软件代码
💻 FRM
📖 第 1 页 / 共 5 页
字号:
       LstRow.Selected(intLoc) = True
    End If
End Sub

Private Sub LstRow_KeyPress(KeyAscii As Integer)
    '回车键:删除选中行项目
    If KeyAscii <> vbKeySpace Then Exit Sub
    If LstRow.SelCount = 1 Then cmdDelete_Click
End Sub

Private Sub LstRow_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
    mDragSource = 1             '拖动源
    LblDrag.Move LstRow.Left, LstRow.top + y - mlngDragHeight \ 2, mlngDragWidth, mlngDragHeight
    LblDrag.Drag
    mblnIsDrag = True           '开始拖动
End Sub


Private Sub sstCross_Click(PreviousTab As Integer)
    Dim intCount As Integer
    
    InitCrossWizard sstCross.Tab    '初始化页面
    ''判断按钮可用性
      cmdBrowse(1).Enabled = False
      cmdBrowse(0).Enabled = False
      CmdReset.Visible = False
    Select Case sstCross.Tab
    Case 0
      picWizard.ZOrder 0
    Case 1
      mblnFieldChanged = False
      If LstDataField.SelCount = 1 Then cmdBrowse(0).Enabled = True
      picWizard.ZOrder 0
    Case 2
      picWizard.ZOrder 1
      CmdReset.Visible = True
    Case 3
      picWizard.ZOrder 0
      If LstField.SelCount = 1 Then cmdBrowse(1).Enabled = True
    End Select
    Select Case PreviousTab
    Case 0
    Case 1
    '重选项目后,重新组织行,列,数据列表选择
     If mblnFieldChanged Then
        InitCrossWizard 3
        LstField.Clear
        LstRow.Clear
        LstCol.Clear
        LstData.Clear
        For intCount = 0 To LstReport.ListCount - 1
          LstField.AddItem LstReport.list(intCount)
        Next intCount
     End If
    Case 2
    Case 3
    End Select
    '是否可完成
    IsComplete
    CmdISEnabled sstCross.Tab
End Sub

Private Sub txtList_Change()
    Dim strSel As String
    Dim strTail As String
    Dim blnIsSame As Boolean
    If LstReport.ListIndex = -1 Or Trim(txtList.Text) = "" Then Exit Sub
    '如果已初始化
    If mblnIsInited(1) Then
        '判断是否重名
        strSel = LstReport.list(LstReport.ListIndex)
        blnIsSame = FindSameField(txtList.Text, LstReport.ListIndex)
        If blnIsSame Then
            Utility.ShowMsg Me.hwnd, "已有名称'" & txtList.Text & "'了,请重新命名!", vbOKOnly, App.title
            txtList.Text = StringOut(strSel, Space(100))
        End If
        '项目名称不能太长
        If Len(txtList.Text) > 30 Then
           Utility.ShowMsg Me.hwnd, "项目名称太长了,请重新命名!", vbOKOnly, App.title
           txtList.Text = Left(txtList.Text, 30)
        Else
          strTail = LstReport.list(LstReport.ListIndex)
          strSel = StringOut(strTail, Space(100))
          LstReport.list(LstReport.ListIndex) = txtList.Text & Space(100) & strTail
        End If
        '项目已改变
        mblnFieldChanged = True
    End If
End Sub

Private Sub txtList_LostFocus()
  Dim strSel As String
  Dim blnErr As Boolean
    If Me.ActiveControl Is cmdCancel Then Exit Sub
    If sstCross.Tab <> 1 Then Exit Sub
    '名称不能为空
    If Trim(txtList.Text) = "" Then
     strSel = LstReport.list(LstReport.ListIndex)
     txtList.Text = StringOut(strSel, Space(100))
    End If
    '是否有非法字符
    blnErr = NameIsErr(txtList.Text, strSel)
    If blnErr Then
        Utility.ShowMsg Me.hwnd, "列名不能有非法字符:'" & strSel & "'!", vbOKOnly, App.title
        sstCross.Tab = 1
        txtList.SetFocus
        Exit Sub
    End If
End Sub
Private Sub txtName_Change()
    '报表名称不能为空,也不能太长
    If strLen(txtName.Text) > 40 Then
       Utility.ShowMsg Me.hwnd, "报表名称太长了,请重新命名!", vbOKOnly, App.title
       txtName.Text = strLeft(txtName.Text, 40)
       Exit Sub
    ElseIf Trim(txtName.Text) = "" Then
       Utility.ShowMsg Me.hwnd, "报表名称不能为空!", vbOKOnly, App.title
       cmdComplete.Enabled = False
       Exit Sub
    End If
    mclsCross.TitleWidth = 0
End Sub


'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'         以下为自定义过程

'设置向导按钮的可用性
'intIndex 页面索引
Private Sub CmdISEnabled(intIndex As Integer)
    Select Case intIndex
    Case 0
      cmdPrevious.Enabled = False
      cmdnext.Enabled = True
    Case 1
      cmdnext.Enabled = True
      cmdPrevious.Enabled = True
      cmdComplete.Enabled = False
    Case 2
      cmdnext.Enabled = True
      cmdPrevious.Enabled = True
    Case 3
      cmdnext.Enabled = False
      cmdPrevious.Enabled = True
    End Select
End Sub
'查找同名项目
' strName:项目名称       intIndex:项目索引
Private Function FindSameField(strName As String, intIndex As Integer) As Boolean
Dim intCount As Integer
Dim strTemp As String
    '寻找数据列表
    intCount = 0
    Do While intCount < LstDataField.ListCount
        If intCount <> intIndex Then
            strTemp = LstDataField.list(intCount)
            strTemp = StringOut(strTemp, Space(100))
            If strTemp = strName Then
                FindSameField = True
                Exit Function
            End If
        End If
        intCount = intCount + 1
    Loop
    '寻找报表项目列表
    intCount = 0
    Do While intCount < LstReport.ListCount
        If intCount <> intIndex Then
            strTemp = LstReport.list(intCount)
            strTemp = StringOut(strTemp, Space(100))
            If strTemp = strName Then
                FindSameField = True
                Exit Function
            End If
        End If
        intCount = intCount + 1
    Loop
    FindSameField = False
End Function

'完成按钮是否有效
Private Sub IsComplete()
  If Trim(txtName.Text) = "" Or LstData.ListCount = 0 Or LstRow.ListCount = 0 _
      Or LstCol.ListCount = 0 Then
      cmdComplete.Enabled = False
  Else
      cmdComplete.Enabled = True
  End If
End Sub

'初始化向导
Private Sub InitCrossWizard(intTab As Integer)
   Dim intCount As Integer, intColumn As Integer
   Dim strItem As String, Strsql As String
   Dim rstData As rdoResultset
     
     If mblnIsInited(intTab) = True Then Exit Sub
     Select Case intTab
     Case 0
         '对组合框初始化
         cboRowSum.Clear
         cboColSum.Clear
         cboRowSum.AddItem "不参与" & Space(100) & "0"
         cboRowSum.AddItem "求和" & Space(100) & "1"
         cboRowSum.AddItem "平均" & Space(100) & "2"
         cboRowSum.AddItem "最小值" & Space(100) & "3"
         cboRowSum.AddItem "最大值" & Space(100) & "4"
        
         cboColSum.AddItem "不参与" & Space(100) & "0"
         cboColSum.AddItem "求和" & Space(100) & "1"
         cboColSum.AddItem "平均" & Space(100) & "2"
         cboColSum.AddItem "最小值" & Space(100) & "3"
         cboColSum.AddItem "最大值" & Space(100) & "4"
         
         '对报表名称,行列合计初始化
         If mclsCross.ReportPrep = 0 Then
            txtName.Text = "未命名"
         Else
            
         End If
         txtName.Text = mclsCross.ReportName
         Me.Caption = mclsCross.ReportName
         chkRow.Value = IIf(mclsCross.IsRowSum, 1, 0)
         chkCol.Value = IIf(mclsCross.IsColSum, 1, 0)
         cboRowSum.Text = cboRowSum.list(mclsCross.RowTotalMethod)
         cboColSum.Text = cboColSum.list(mclsCross.ColTotalMethod)
         mblnIsInited(0) = True
      Case 2
'        mclsFilter.InitCondArr mclsCross.ReportID, mclsCross.ViewId, 2
        mclsFilter.ShowFilter Me, mclsCross.ReportID, 2, 64, , "日期"
        CmdReset.Visible = True
        mblnIsInited(2) = True
        
     Case Else
        '初始化列表
        '对数据项目列表初始化
        LstDataField.Clear
        Strsql = "SELECT   ReportField.*,ViewField.* FROM ReportField ,ViewField " _
               & " WHERE ReportField.lngViewFieldID = ViewField.lngViewFieldID" _
               & " And ReportField.lngReportID =" & mclsCross.ReportID
        Set rstData = gclsBase.basedb.OpenResultset(Strsql, rdOpenStatic)
        With rstData
         Do While Not .EOF
           If !strViewFieldDesc <> "年" And !strViewFieldDesc <> "月" And !strViewFieldDesc <> "日" Then
           LstDataField.AddItem !strReportFieldDesc & Space(100) & .rdoColumns("ViewField.lngViewFieldID") & "\" _
                    & !strTableName & "\" & !strFieldName & "\" & !strFieldType & "\" _
                    & !bytFieldSize & "\" & !strViewFieldDesc & "\" & !lngDisplayWidth
           End If
           .MoveNext
        Loop
        End With
        '对报表列表初始化(已选项目)
        LstReport.Clear
        LstField.Clear
        intColumn = 0
        Do While intColumn < mclsCross.Columns
            intCount = 0
            Do While intCount < LstDataField.ListCount
                strItem = LstDataField.list(intCount)
                Strsql = StringOut(strItem, Space(100))
                Strsql = GetNoXString(strItem, 3, "\")
                If Strsql = mclsCross.ColumnFieldName(intColumn) Then
                   LstReport.AddItem mclsCross.ColumnDesc(intColumn) & Space(100) & strItem
                   LstField.AddItem mclsCross.ColumnDesc(intColumn) & Space(100) & strItem
                   LstDataField.RemoveItem intCount
                   Exit Do
                Else
                   intCount = intCount + 1
                End If
            Loop
            intColumn = intColumn + 1
        Loop
        '判断按钮是否可用
        txtList.Enabled = False
        LblList.Enabled = False
        CmdEnabled LstDataField, cmdArrow(0), cmdArrow(1)
        CmdEnabled LstReport, cmdArrow(2), cmdArrow(3)
        mblnIsInited(1) = True
    
        '对行列表初始化(已选项目中的行项目,类型值为3)
           LstRow.Clear
           intColumn = 0
            Do While intColumn < mclsCross.RowColumns
            intCount = 0
                Do While intCount < LstField.ListCount
                    strItem = LstField.list(intCount)
                    strItem = StringOut(strItem, Space(100))
                    If strItem = mclsCross.ColumnDesc(mclsCross.RowLoc(intColumn)) Then
                       LstRow.AddItem LstField.list(intCount)
                       LstField.RemoveItem intCount
                       Exit Do
                    Else
                        intCount = intCount + 1
                    End If
                 Loop
                 intColumn = intColumn + 1
            Loop

        '对列列表初始化(已选项目中的列项目,类型值为4)
        LstCol.Clear
        intColumn = 0
        Do While intColumn < mclsCross.ColColumns
        intCount = 0
            Do While intCount < LstField.ListCount
                strItem = LstField.list(intCount)
                strItem = StringOut(strItem, Space(100))
                If strItem = mclsCross.ColumnDesc(mclsCross.ColLoc(intColumn)) Then
                   LstCol.AddItem LstField.list(intCount)
                   LstField.RemoveItem intCount
                   Exit Do
                Else
                    intCount = intCount + 1
                End If
             Loop
             intColumn = intColumn + 1
        Loop

        '对数据列表初始化(已选项目中的数据项目,类型值为8,只有一个)
        LstData.Clear
        intColumn = 0
        Do While intColumn < mclsCross.DataColumns
            intCount = 0
            Do While intCount < LstField.ListCount
                strItem = LstField.list(intCount)
                strItem = StringOut(strItem, Space(100))
                If strItem = mclsCross.ColumnDesc(mclsCross.DataLoc) Then
                   LstData.AddItem LstField.list(intCount)
                   LstField.RemoveItem intCount
                   Exit Do
                Else
                   intCount = intCount + 1
                End If
            Loop
            intColumn = intColumn + 1
        Loop
        mblnIsInited(3) = True
     End Select
     '是否可完成
     IsComplete
 End Sub
   
 
'列表下的数据浏览
Private Sub LstBrowse(Lst As ListBox)
    Dim frm As New frmBrowse
    Dim intCount As Integer
    Dim rstBrowse As rdoResultset
    Dim Strsql As String, strTail As String, strHead As String
    Dim strType As String, strLen As String
    
    On Error Resume Next
    strTail = Lst.list(Lst.ListIndex)             '项目名称
    strHead = StringOut(strTail, Space(100))      '项目属性
    
    frm.LstBrowse.Clear
    '生成记录集
    Strsql = "SELECT DISTINCT " & GetNoXString(strTail, 3, "\") & " as [Name]  " _
            & mclsCross.FROM
    Set rstBrowse = gclsBase.basedb.OpenResultset(Strsql, rdOpenStatic)
'     If rstBrowse.rowcount = 0 Then
'        Utility.ShowMsg Me.hwnd, "选

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -