SBO二次开发中点击Matrix第一行的排序功能代码

看有人问到了,就把之前写的代码拿出来跟大家分享下。 事件响应写在ItemEvent中,鼠标双击事件。 Public Sub SortMatrix(ByVal pval As SAPbouiCOM.ItemEvent) Dim DT As DataTable Dim DTCol As System.Data.DataColumn Dim DTRow As System.Data.DataRow Dim DTRowV As System.Data.DataRowView Dim oForm As SAPbouiCOM.Form Dim oDBDS As SAPbouiCOM.DBDataSource Dim oItem As SAPbouiCOM.Item Dim oMatrix As SAPbouiCOM.Matrix Dim oCol As SAPbouiCOM.Column Dim sKeyColField As String '排序的字段绑定的Datasource字段名 Dim iRow As Integer Dim iLineId As Integer Dim iDSIndex As Integer Dim objCompareValue_1 As Object Dim objCompareValue_2 As Object Dim dtDataType As System.Type Try oForm = SBOApp.Forms.Item(pval.FormUID) oItem = oForm.Items.Item(pval.ItemUID) If oItem.Type <> SAPbouiCOM.BoFormItemTypes.it_MATRIX Then Exit Sub DT = New System.Data.DataTable DTCol = New System.Data.DataColumn oMatrix = oForm.Items.Item(pval.ItemUID).Specific If oMatrix.RowCount < 2 Then Exit Sub '小于2行,无需排序,退出 SBOApp.SetStatusBarMessage("正在排序,请稍后。", SAPbouiCOM.BoMessageTime.bmt_Long, False) oForm.Freeze(True) oCol = oMatrix.Columns.Item(pval.ColUID) sKeyColField = oCol.DataBind.Alias '排序依据的字段绑定的Datasource字段名 oMatrix.FlushToDataSource() oDBDS = oForm.DataSources.DBDataSources.Item(oCol.DataBind.TableName) dtDataType = Me.GetSystemDataTypeBySBODataType(oDBDS.Fields.Item(sKeyColField).Type) If dtDataType Is System.Type.GetType("System.Int32") Then If Replace(Me.GetMatrixCellValue(oCol, 1), " ", "") = "" Then objCompareValue_1 = 0 Else objCompareValue_1 = CInt(Me.GetMatrixCellValue(oCol, 1)) '第一行的数据 End If If Replace(Me.GetMatrixCellValue(oCol, oMatrix.RowCount), " ", "") = "" Then objCompareValue_2 = 0 Else objCompareValue_2 = CInt(Me.GetMatrixCellValue(oCol, oMatrix.RowCount)) '最后一行的数据 End If ElseIf dtDataType Is System.Type.GetType("System.Single") Then If Replace(Me.GetMatrixCellValue(oCol, 1), " ", "") = "" Then objCompareValue_1 = 0 Else objCompareValue_1 = CSng(Me.GetMatrixCellValue(oCol, 1)) '第一行的数据 End If If Replace(Me.GetMatrixCellValue(oCol, oMatrix.RowCount), " ", "") = "" Then objCompareValue_2 = 0 Else objCompareValue_2 = CSng(Me.GetMatrixCellValue(oCol, oMatrix.RowCount)) '最后一行的数据 End If Else objCompareValue_1 = Me.GetMatrixCellValue(oCol, 1).ToString '第一行的数据 objCompareValue_2 = Me.GetMatrixCellValue(oCol, oMatrix.RowCount).ToString '最后一行的数据 End If '往DataTable中添加排序依据字段 DTCol.ColumnName = sKeyColField DTCol.DataType = dtDataType If DT.Columns.Contains(DTCol.ColumnName) Then DTCol.DataType = dtDataType Else DT.Columns.Add(DTCol) End If '往DataTable中添加"ID"字段,记录DataSource序列 DTCol = New System.Data.DataColumn DTCol.ColumnName = "ID" DTCol.DataType = System.Type.GetType("System.Int32") If DT.Columns.Contains(DTCol.ColumnName) Then DTCol.DataType = System.Type.GetType("System.Int32") Else DT.Columns.Add(DTCol) End If '为DataTable添加行数据 For iRow = 0 To oDBDS.Size - 1 oDBDS.Offset = iRow DTRow = DT.NewRow DTRow(sKeyColField) = oDBDS.GetValue(sKeyColField, iRow) DTRow("ID") = oDBDS.GetValue("LineId", iRow) DT.Rows.Add(DTRow) Next '排序 If objCompareValue_1 > objCompareValue_2 Then '原来是降序排列 DT.DefaultView.Sort = sKeyColField ElseIf objCompareValue_1 < objCompareValue_2 Then DT.DefaultView.Sort = sKeyColField & " Desc " Else oForm.Freeze(False) Exit Sub End If '根据排序后结果更新Matrix中值 oItem.AffectsFormMode = False For iRow = 0 To DT.DefaultView.Count - 1 DTRowV = DT.DefaultView(iRow) iLineId = DTRowV("ID") '找到DataSource中的行 For iDSIndex = 0 To oDBDS.Size - 1 oDBDS.Offset = iDSIndex If iLineId = oDBDS.GetValue("LineId", iDSIndex) Then Exit For End If Next oMatrix.SetLineData(iRow + 1) Next oItem.AffectsFormMode = True 'oMatrix.LoadFromDataSource() SBOApp.SetStatusBarMessage("排序完成!", SAPbouiCOM.BoMessageTime.bmt_Medium, False) oForm.Freeze(False) Catch ex As Exception oForm.Freeze(False) Throw New Exception("排序发生错误." & ex.Message) End Try End Sub ''' ''' 根据BO的数据类型获取系统数据类型 ''' ''' ''' ''' Public Function GetSystemDataTypeBySBODataType(ByVal DataType As SAPbouiCOM.BoFieldsType) As System.Type Try Select Case DataType Case SAPbouiCOM.BoFieldsType.ft_AlphaNumeric Return System.Type.GetType("System.String") Case SAPbouiCOM.BoFieldsType.ft_Date Return System.Type.GetType("System.String") Case SAPbouiCOM.BoFieldsType.ft_Float Return System.Type.GetType("System.Single") Case SAPbouiCOM.BoFieldsType.ft_Integer Return System.Type.GetType("System.Int32") Case Else Return System.Type.GetType("System.String") End Select Catch ex As Exception Return System.Type.GetType("System.String") End Try End Function ''' ''' 得到Matrix单元格的值 ''' ''' 列 ''' 行 ''' ''' Public Function GetMatrixCellValue(ByVal Column As SAPbouiCOM.Column, ByVal Row As Integer) As Object Dim edt As SAPbouiCOM.EditText Dim chk As SAPbouiCOM.CheckBox Dim cmb As SAPbouiCOM.ComboBox Dim oObject As Object Try Select Case Column.Type Case SAPbouiCOM.BoFormItemTypes.it_CHECK_BOX chk = Column.Cells.Item(Row).Specific If chk.Checked Then Return "Y" Else Return "N" Case SAPbouiCOM.BoFormItemTypes.it_EDIT, SAPbouiCOM.BoFormItemTypes.it_LINKED_BUTTON edt = Column.Cells.Item(Row).Specific Return edt.Value Case SAPbouiCOM.BoFormItemTypes.it_COMBO_BOX cmb = Column.Cells.Item(Row).Specific Try oObject = cmb.Selected.Value Catch ex As Exception End Try Return oObject End Select Catch ex As Exception Throw New Exception End Try End Function
一、软件功能 富盛SBO插件集基于富盛SBO程序开发框架,主要包括以下功能模块: 富盛Addon插件通用权限管理 建立于富盛Addon程序开发框架的所有模块产品的通用权限管理,可以细化管理到业务模块的功能项目,比如某个业务窗口的浏览权限、新增权限、编辑权限、删除权限等都可以纳入综合管理。 界面参见:http://blog.vsharing.com/foresun/A680619.html 富盛SBO固定资产管理 为了适应国企业的固定资产管理,遵循国家财务行业对固定资产的折旧方法和要求,支持不折旧、直线折旧、快速折旧、工作量折旧等常用的折旧方式,并对资产增加、资产减少的各种交易方式提供了支持,由于提供了灵活的交易自定义功能,软件能够满足当前国内工业、商业企业的固定资产管理需要。 功能参见:http://blog.vsharing.com/foresun/A680619.html 富盛SBO金税接口管理 富盛Sbo金税接口模块适用于包括工业企业、商品流通等所有经营管理体制的需要企业Sbo资源管理系统同金税工程进行数据交互的企业,独立外资、外合资、本土资企业都可以选用富盛Sbo金税接口管理模块协助企业实现Sbo企业资源管理同国家强制规定的金税接口的信息交互。 操作手册参见: http://blog.vsharing.com/foresun/A683474.html 富盛SBO供应商成本利润结算分析 [强烈推荐] 针对当前商业运行的供应商对于经销商的优惠政策、促销政策,联系到业务运行的物料、赠品、赠券等费用,以及供应商政策之外或者无法通过供应商政策体现的月返等季节性或者政策性返利补差等,通过本软件进行综合集成管理。实现了经营期间经营商品的销售、成本、政策调整后实际成本、毛利、毛利率、经营费用与返利补差之后的企业真正的利润与成本分析。同时提供了对品类、货品、结算类型、供应商、业务主管、业务代表、经营单品的销售、成本、政策返利、经营费用、供应商返补的分类分析。 参见:http://blog.vsharing.com/foresun/A626306.html。当前功能要比参见资料强大的多,使用便知。 富盛SBO企业经营分析 针对Sbo的企业经营分析功能薄弱的情况,提供了一个强大自定义分析工具,通过自定义之后,软件自动完成对企业关注的数据的综合分析。企业可以完成通过分析工具分析企业经营情况、利润情况、费用使用情况,弥补了Sbo的利润表、资产负债表等功能不足的缺陷。 一个分析实现例示,参见:http://blog.vsharing.com/foresun/A601436.html 当前版本支持多分析项目,就是说不管可以实现上述实例的项目分析,还可以另行定义其它的,比如利润分析、资产负债分析等等。 软件还支持跨数据库的数据分析,就是说,即使业务数据不在Sbo数据库,由于分析软件支持存储过程、视图和数据表之上的数据分析,所以可以实现跨业务数据库的经营分析。我们就曾经为一家企业的三个Sbo业务数据库通过本软件进行综合业务分析。 富盛SBO入库验收管理 [强烈推荐] 针对Sbo直接引用订单入库的简易管理,很多企业希望采购到货之后需要根据到货单增加到货验收,本软件模块就是为了实现这个业务需求。在Sbo标准业务流程插入质检验收环节,只有验收业务进行处理之后的采购订单、退货单才能被采购入库业务和贷项凭证进行引用,继续接下来的其他业务。 富盛SBO员工工资管理 [强烈推荐] 建立于富盛Sbo插件程序开发框架,运行于Sbo之上的企业员工工资管理,除了普通的工资管理之外,本软件通过三种方式来实现员工的考核工资:数据提取、数据计算、数据录入。数据提取通过一个开放性的统一管理方式从Sbo或者第三方的Addon甚至在其它的软件(必需SQL Server数据库)通过存储过程、视图、数据表提取数据,从而可以同考勤系统、绩效考核系统的数据进行集成;同时支持复杂数据分析,为绩效考核提供了充分的业务接口,也使工资管理软件提供了强大的扩展性和实用性。 二、富盛SBO程序开发框架 SBO行业的朋友对富盛软件应该不陌生,对富盛SBO程序开发框架也应该有所耳闻。富盛SBO程序开发框架是供广大SBO Addon开发爱好者使用的终生免费程序包,包含了富盛软件Sbo Addons程序开发框架企业版的所有功能,比如集成了基于FastReport的打印与报表查询功能、透过SBO限制的键盘输入捕捉功能、序列号自动生成器、集成知名WINRAR开源压缩等等,富盛软件在其博客上介绍的所有Addon实现技巧和功能。 三、版权声明 您可以任意复制、安装和使用本软件,任何获得此软件的用户均自动获得本软件的使用权,但是富盛软件保留对此软件的所有权利。 请尊重作者
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值