Visual Basic实现动态报表

Visual Basic介绍及简单例子 这个简单的项目展示了 Visual Basic 中基本的窗体设计、控件使用和事件处理。以下是一个用 Visual Basic 创建的简单的 Windows 窗体应用程序示例,实现一个加法计算器。打开 Visual Studio,创建一个新的 Visual Basic Windows 窗体应用项目。Visual Basic(简称 VB)是一种由微软公司开发的包含协助开发环境的事件驱动编程语言。设置各个控件的属性,比如可以将按钮的。)用于显示提示信息,一个按钮(属性设置为“计算”,标签的。)用于执行加法操作。 阅读详情
 Visual Basic中如何实现动态报表是一个在众多VB网站论坛上提问频率很高的问题,在实际项目中, 作者也遇到这个问题, 经过一番深入研究,用一种简单的方法在Visual Basic中实现了动态报表。

align="right" marginwidth="0" marginheight="0" src="http://images.chinabyte.com/adjs/iframe-pip/y-software-pip.html" frameborder="0" width="360" scrolling="no" height="300">  Visual Basic中制作报表的工具有很多,如Crystal报表编辑器、Datareport报表窗体、Printer对象以及象Vsview等一些第三方控件。但Crystal报表编辑器一般只能制作定制报表,Printer对象操纵起来非常复杂,第三方控件多数需要购买,费用不非。作者制作动态报表是通过Datareport窗体实现的,以下通过一个具体的例子说明是如何实现动态报表的。

  假设在C盘dongtai目录下存放一个Access数据库stock.mdb,其中的"股票行情表"用来记录股票行情,"股票行情表"的数据结构如1表所示:

表1 "股票行情表"数据结构

字段名称ID stocknostocknamepriceswingmaxpriceminpricebargain
数据类型长整型文本 文本双精度型双精度型双精度型 双精度型长整型
说 明 序号 股票代号 股票名称收盘价涨跌最高价 最低价 成交量

  如果要设计这样的一个报表,报表输出字段由用户自己决定,用Datareport窗体如何设计呢?下面一步一步地说明。

  1. 熟悉Datareport窗体和数据报表控件

  Datareport窗体是一个和普通窗体相似的窗体,最大的差别是该窗体上只能摆放数据报表控件,这种类型的控件只有六种,他们分别是:RptLabel,Rpt Text Box,RptImage,RptShape,RptLine,RptFunction。从名称上基本可以识别他们的用途,RptLabel用来显示非数据绑定的文本的标签;通常用来制作报表的页标题;Rpt Text Box显示数据绑定的文本的内容,即显示数据库的字段的内容;RptImage显示一个图形,例如一个公司的商标;RptShape能够画出许多图形,强调信息或增强视觉效果;RptLine能够在报表中画线,分割报表种不同的区域;RptFunction允许在报表标题或报表注脚区域摆放,它包含一个简单的数学统计函数。Datareport窗体和数据报表控件如图1所示。


图1 Datareport窗体和数据报表控件

  为了能够输出所有字段,必须在Datareport窗体不同的区域中摆放足够数量的相关报表数据控件,本例最多字段为八个,所以在"页标头"区域(section2)摆放了八个Rptlabel控件、九条竖分割线和上下两条横线,在"细节"区域(section1)摆放了八个Rpt Text Box 控件、九条竖分割线和下面一条横线,如图1所示。同时为了以后的编码方便,对各控件采用如下的命名方式:控件名称为控件类型+区域号+序号,例如,"页标头"区域(section2)八个Rptlabel控件分别命名为label21、label22、label23……label28,细节"区域(section1)的八个Rpt Text Box 控件分别命名为Text11、Text12、Text13……Text18,各区域的竖分割线采用同样的命名方式,但横分割线以控件类型+区域号来命名,如"页标头"区域中的上下两条横线分别命名为Line2和Line_2,在后面的代码里可以看出这种命名方式的好处。

  Datareport窗体中最重要的三种数据控件是Rpt Text Box、Rptlabel和RptFunction,必须分别设置它们的属性,Rpt Text Box最重要的属性是datafield,该属性指明了绑定记录的字段名称;Rptlabel最重要的属性是Caption,该属性指明要显示的文本内容;RptFunction最重要的属性是datafield和functiontype,前者指明要绑定且作统计的记录的字段名称,后者指明统计函数的类型。这三种控件有一共同属性是Gangrow,该属性值为True时,当显示的内容超过控件的宽度时可以换行。Datareport窗体也有很多属性,如LeftMargin、RightMargin 、TopMargin 、BottomMargin 、reportwidth 、DataSource 等,其中reportwidth 设置报表的纸面宽度(必须减去左右页边距的宽度),reportwidth 须与打印机设置的纸面大小相对应,DataSource设置Datareport窗体的数据源。需要说明的是Datareport窗体中的各个区域都是对象,如section1.section2等,他们也有很多的属性,其中重点提出Keeptogther属性,当Keeptogether为True时,如果某条记录处在一页的最下面,但又不能够完全的打印出来时,可强制这条记录换到下一页输出,从而保证数据的完整性。以上只是简单的说明了Datareport窗体中涉及到的一些重要属性,其它未加说明的属性可在相关书籍和MSDN中查阅。
 2.主界面设计

  作者设计的主界面如图2所示。其中候选字段的ListBox(lst_candidate)用来显示所有原始字段,选中字段的ListBox(lst_selected)用来记录选中的以报表形式输出的字段,两个ListBox之间的带有"<"和">"标题的按钮用来添加和移去字段,用一个文本框(txt_caption)设置报表的标题,点击"输出报表"(cmd_report)按钮即可输出报表。


图2 动态报表主界面

  3.字段宽度的控制

  字段宽度的控制在报表设计中很重要,这里是通过lst_selected的Itemdata的属性实现的,仅用一个子程序可完成对lst_selected的Itemdata的属性赋值,代码如下。

'******************************************************************
'字段宽度控制子程序
Private Sub fieldwidth(lst As ListBox)
Dim i As Integer
Const wordwidth As Integer = 201 '五号字的宽度为201缇
For i = 0 To lst.ListCount - 1
Select Case lst.List(i)
Case "序号"
lst.ItemData(i) = wordwidth * 3
Case "股票代号"
lst.ItemData(i) = wordwidth * 5
Case "股票名称"
lst.ItemData(i) = wordwidth * 6
Case "收盘价"
lst.ItemData(i) = wordwidth * 5
Case "涨跌"
lst.ItemData(i) = wordwidth * 4
Case "最高价"
lst.ItemData(i) = wordwidth * 5
Case "最低价"
lst.ItemData(i) = wordwidth * 5
Case "成交量"
lst.ItemData(i) = wordwidth * 4
End Select
Next i
End Sub
'******************************************************************

  4.设置Datareport窗体属性,控制输出格式

  设置Datareport窗体的属性,控制输出格式也可用一子过程完成,需要说明的是为Datareport和数据控件设置属性时,在设计编码过程中,Visual Basic多数不出现正常情况下的智能提示,不必大惊小怪,完整代码如下。

'***********************************************************************
'设置报表窗体各种参数,控制输出格式
Private Sub setDatareport(lst As ListBox, dtr As Datareport, scaption As String)
Dim leftpos As Long 'leftpos为存放控件left属性的变量
Dim reportwidth As Long 'reportwidth为存放Datareport总宽度的变量
Dim i As Integer

'求总宽度
For i = 0 To lst.ListCount - 1
reportwidth = reportwidth + lst.ItemData(i)
Next
'初始化
With dtr
'设置数据源,页边距,标题,横向分割线,section1、2区第一条竖分割线
.LeftMargin = 1440
.RightMargin = 1440
.TopMargin = 1440
.BottomMargin = 144
.reportwidth = Printer.Width - 2880 - 20
Set .DataSource = rs 'rs为ADODB数据源
.Sections("section4").Controls.Item("label41").Caption = scaption
.Sections("section4").Controls.Item("label41").Width = reportwidth
.Sections("section4").Controls.Item("label42").Width = reportwidth
.Sections("section2").Controls.Item("line_2").Width = reportwidth
.Sections("section2").Controls.Item("line2").Width = reportwidth
.Sections("section1").Controls.Item("line1").Width = reportwidth
.Sections("section2").Controls.Item("line20").Left = 0
.Sections("section1").Controls.Item("line10").Left = 0
End With

'为section1,2区设置数据
leftpos = 0
For i = 0 To lst.ListCount - 1
dtr.Sections("section2").Controls.Item("label1" & (i + 1)).Caption = lst.List(i)
dtr.Sections("section2").Controls.Item("label1" & (i + 1)).Width = lst.ItemData(i)
dtr.Sections("section2").Controls.Item("label1" & (i + 1)).Left = leftpos
dtr.Sections("section1").Controls.Item("text1" & (i + 1)).DataField = lst.List(i)
dtr.Sections("section1").Controls.Item("text1" & (i + 1)).Width = lst.ItemData(i)
dtr.Sections("section1").Controls.Item("text1" & (i + 1)).Left = leftpos
dtr.Sections("section2").Controls.Item("line2" & (i + 1)).Left = leftpos + lst.ItemData(i)
dtr.Sections("section1").Controls.Item("line1" & (i + 1)).Left = leftpos + lst.ItemData(i)
leftpos = leftpos + lst.ItemData(i)
'特殊字段的格式特殊处理
If lst.List(i) = "收盘价" Or lst.List(i) = "最低价" Or lst.List(i) = "最高价" Then
dtr.Sections("section1").Controls.Item("text1" & (i + 1)).DataFormat.Format = "¥#,##0.00"
End If
If lst.List(i) = "涨跌" Then
dtr.Sections("section1").Controls.Item("text1" & (i + 1)).DataFormat.Format = "#,##0.00"
End If
If lst.List(i) = "成交量" Then
dtr.Sections("section1").Controls.Item("text1" & (i + 1)).DataFormat.Format = "#,##0"
End If
Next i

'对不用的text控件必须设置其datafield属性,如lst.List(0),否则出错,但一定让其不可见
'其他不用的label,line控件同样均不可见
i = lst.ListCount
While i < (dtr.Sections("section1").Controls.Count - 10)
'10 为section1区域的非text控件的控件总数
i = i + 1
dtr.Sections("section1").Controls.Item("text1" & i).DataField = lst.List(0)
dtr.Sections("section1").Controls.Item("text1" & i).Visible = False
dtr.Sections("section2").Controls.Item("line2" & i).Visible = False
dtr.Sections("section1").Controls.Item("line1" & i).Visible = False
dtr.Sections("section2").Controls.Item("text1" & i).Visible = False
Wend
End Sub
'******************************************************************************

  5.报表输出

  报表输出是在单击"输出报表"按钮(cmd_report)完成的,代码如下。

'*******************************************************************************
Private Sub cmd_report_Click()
If lst_selected.ListCount <> 0 Then
Call fieldwidth(lst_selected) '设置字段宽度
Call setdatareport(lst_selected, Dtreport, Trim$(txt_caption)) '设置报表属性
    'Show方法用来显示Datareport窗体,本例中Datareport窗体命名为Dtreport
Dtreport.Show
Else
MsgBox "请选择要输出的字段条目", vbOKOnly + vbInformation
End If
End Sub
'**********************************************************************************

  6.在Datareport窗体中打印报表

  Datareport窗体运行后,其外观如图3所示。该窗体的上部有三个功能按钮,第一个按钮用来打印报表,第二个按钮可以把报表输出为Html格式的文件,第三个按钮用来以多种比例缩放报表,便于浏览。


图3 动态报表

VB模板打印与批量打印实现全解析 典型的VB模板打印流程包括:加载模板文件 → 绑定数据源 → 替换占位符 → 自动生成文档 → 打印或导出PDF。该过程可通过COM自动化控制Microsoft Word实现,后续章节将深入讲解各环节关键技术细节。批量打印(Batch Printing)是指通过程序化手段一次性生成并打印多个结构相同但内容各异的文档的过程。与传统的单个文档手动打印方式相比,批量打印通过自动化脚本或应用程序,实现文档的动态生成、内容填充和批量输出。在VB环境下,批量打印通常借助Word对象模型。 阅读详情

相关推荐

基于VB的成本计算与报表生成系统实战设计

简介:VB(Visual Basic)是微软开发的事件驱动编程语言,广泛应用于Windows平台下的数据处理与报表系统开发。“VB 成本计算报表”是一个利用VB构建的成本管理工具,涵盖成本数据的输入、分类、计算、分析及可视化展示功能。该系统支持连接Excel、SQL Server等数据源,实现固定/变动成本分类、成本预测模型、成本-产量关系分析,并可自动生成定制化报表。通过良好的用户交互界面和错误处理机制,提升企业成本控制与决策效率。本项目包含完整开发流程,适用于财务信息化实践教学与企业实际应用。

weixin_35094083的博客 434

水晶报表10 rdc 动态生成水晶报表 添加删除分组

水晶报表10 rdc 动态生成水晶报表 添加删除分组The information in the article refers to:Seagate Crystal Reports 8 Applies to: Reported version onlyReport Creation API Adding and deleting groups in a reportSynopsisThis art

闯荡者的专栏 2350

VB实现多Excel文件智能合并工具开发

很多人学了VBA,却始终停留在“能跑就行”的阶段。一旦遇到真实业务场景——文件多了、路径变了、权限严了——立刻原形毕露。真正的办公自动化,不只是写几行代码那么简单。它需要:🔧工程化思维:模块划分、错误处理、资源管理🔐安全性意识:权限控制、日志审计、防误操作🚀用户体验设计:进度反馈、友好提示、一键执行只有把这些细节都做到位,你的脚本才能从“玩具”变成“工具”,真正为企业创造价值。

weixin_42511373的博客 630

在VB中使用动态分组报表

<!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--><script type="text/javascript"

zgqtxwd的专栏 516

VB+Access库存管理系统设计方案:从手工台账到数据库应用的落地拆解

数据库应用开发中,VB与Access的组合是经典入门方案。VB提供可视化界面与事件驱动逻辑,Access负责数据存储,通过ADO实现数据访问。这种架构适合中小型MIS系统快速落地,能有效解决手工台账效率低、易出错的问题。在库存管理场景中,可实现入库、出库、查询、报表及权限控制,并通过事务处理保证数据一致性。本文以库存管理系统为例,详细拆解从需求分析到代码实现的完整过程,涵盖登录权限、动态SQL查询、报表输出及常见避坑经验,为开发者提供可直接参考的工程实践。

weixin_29587015的博客 246

Visual Basic上位机编程实战案例精讲

该系统需具备三大核心功能:数据采集:通过串口(RS-485/RS-232)轮询多个PLC或智能仪表,获取温度、压力、流量等实时参数。实时监控:以图形化界面展示数据趋势、设备状态,并在异常时触发声光报警。报表输出:支持按日、月生成统计报表,可导出为Excel或PDF格式用于归档。此外还需支持:- 多设备并行通信- 断线自动重连- 历史数据本地缓存- 用户权限分级控制(预留接口)

weixin_33205138的博客 750

VB查询数据库之报表——机房收费系统总结(六)

我们要用一个软件做报表的模板、然后在VB里面添加部件、代码调用模板,详细步骤如下。 一、下载安装 首先做报表要下载安装Grid++Report 4.5 报表设计器 点击下载(内含破解补丁) 二、制作模板 1、打开软件——插入——页眉、明细网格、页脚、如图 2。制作页眉 静态框:好像Label,能写入文字并显示 综合文字框:可以写入函数、变量等、跟...

IT小白 207

基于Visual Basic的汽车配件管理系统源码完整项目

汽车配件管理系统的开发旨在提升汽修企业与配件经销商在库存、采购、销售及客户关系管理方面的信息化水平。系统集成了用户身份验证、配件信息维护、库存动态监控、采购与销售流程管理、客户数据追踪以及多维度报表统计等核心功能,全面覆盖汽配行业日常运营的关键环节。通过本系统,企业能够实现数据集中化管理,降低人为错误率,提高工作效率,并为经营决策提供实时数据支持。本章将从整体业务需求出发,阐述系统所涵盖的功能模块及其在实际应用场景中的价值,为后续理论分析与技术实现奠定基础。

weixin_42576467的博客 780

vb 使用Cystal Reports 9小例子

  Private Sub btnOK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOK.Click If sOption = 0 Then Try Dim f As New BogartMis.Bas...

weixin_34044273的博客 89

MT6771 Android13 背光曲线调试与光感数据校准实战

本文详细介绍了MT6771平台在Android 13系统上进行背光曲线调试与光感数据校准的实战经验。针对高亮度环境下背光误调节问题,深入分析了光感数据上报机制,并提供了驱动层配置修改、背光曲线优化及常见问题解决方案,帮助开发者快速定位并解决类似问题。

moon9的博客 287

Excel地理探测器实战:5分钟搞定空间分异性分析(附完整数据集)

本文详细介绍了如何使用Excel地理探测器插件进行空间分异性分析。通过5分钟实战教程,手把手指导数据格式准备、软件操作及四大探测器(分异及因子、交互作用、风险区、生态探测器)的结果解读,帮助规划师、研究者快速验证地理因素对现象分布的影响,大幅降低GIS分析门槛。

peace的博客 607

打印DATAgridview所见即所得

Public Class dayreport1    Inherits System.Windows.Forms.Form    Private TableFont As New Font("宋体", 9)           当前要打印文本的字体及字号     Private HeadFont As New Font("黑体", 12, FontStyle.Underline) 表头字体

l252722625的专栏 445

纽马克-贝塔法(Newmark-Beta Method)在结构动力学中的应用与实现

本文深入解析了纽马克-贝塔法(Newmark-Beta Method)在结构动力学数值计算中的核心原理与应用。作为经典的时间积分算法,它通过调节γ和β参数,在计算精度、稳定性与效率间取得平衡,尤其适用于地震响应、风振分析等工程场景。文章详细阐述了其数学内核、在有限元分析中的实现步骤,并对比了隐式与显式方案的适用场景,为工程师提供了关键的方法选择与参数调优指导。

weixin_29232121的博客 148

visual basic数据库开发专区

Visual Basic通用报表设计小结  在VB平台下制作报表大致有两种选择:使用VB自带的Data Report控件和借助第三方软件。其中第三方软件比较著名的就是MS Excel和Seagate公司的CrystalReporter,以下就这三个方案进行详细的讨论。详细内容>>编者按  针对数据库进行开发是Visual Basic的主要应用之一,虽然微软做了大量工作试图使数据库开发变得更容易,但

cqfz123的专栏 3569

针对中文CLIP模型训练失效的解决方案记录

解决了中文CLIP模型无法正确训练的问题

weixin_45906434的博客 1621

NCBI|叶绿体基因组数据上传

叶绿体基因组NCBI上传 小编最近在NCBI上传了好几次数据…想着可以把具体的上传步骤写下来,供大家参考。以下是叶绿体基因组的上传示例,大家可以瞅瞅 图片 准备工作 1.登录NCBI官网:https://www.ncbi.nlm.nih.gov/, 依次点击“sign in to NCBI”——“See more 3rd party sign in options”——搜索“Microsoft live.com”。 ”sign in to NCBI“ ”See more 3rd party sign i

weifanbio的博客 3900

Visual Basic语言的数据可视化

Visual Basic是一种由微软开发的编程语言,其易用性和灵活性使其成为许多开发人员的选择。VB语言可以快速构建用户界面,并且支持多种数据访问和图形处理的功能。尤其在Microsoft Office(如Excel、Access)环境中,VB常用于自动化任务和数据处理。

2501_90435709的博客 396

cilium native-routing模式流程分析

本文分析cilium native routing模式下的报文路径和涉及到的ebpf源码分析。实验环境在vxlan模式下修改参数后而来。native routing和vxlan模式的区别主要是跨节点通信时,vxlan模式需要封装,native routing模式需要根据目的ip查找路由表转发到其他节点。

fengcai_ke的博客 988

【水晶报表】创建报表 續

 六、动态改变数据源的代码 <!--Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->Dim dsdataSet As New DataSet() Dim oRpt As New rptClient() 已建立的报表rptCli

Taskcnjia的专栏 460

企业如何开展BI建设--指标体系建设

很多企业的数字化转型工作都是从做BI项目开始的,很多企业认为,BI就是做指标大屏,所以做了很多的驾驶舱,也做了很多指标,有从系统取的,有手工填报的,甚至手工填报的比例占到了70%,最终BI沦为了填报系统,业务认为BI就是把从线下的微信沟通转到了线上录入展示,并没有给业务代来任何提升,久而久之,BI大屏就没人关心,公司高层也认为数据都是填报的,都经过了加工处理,这种数据不可信,不能反映业务开展的实际。其实在BI系统建设之前,我们首先要做的就是要梳理企业的指标,到底我们要展示哪些指标?

263

YOLOv11改进 | 引入DEConv细节增强卷积模块:恢复细节信息,提升小目标检测精度

摘要: YOLOv11在目标检测中面临小目标检测精度不足的问题,主要由于细节信息丢失。本文提出引入DEConv(细节增强卷积)模块,通过多分支卷积和残差连接恢复高频细节,提升小目标检测性能。DEConv结合3×3卷积与空洞卷积增强边缘信息,并自适应融合特征,兼容YOLOv11的P3层(小目标关键层)且计算高效。实验表明,该改进在无人机航拍、显微镜图像等密集小目标场景中显著减少漏检,同时保持轻量化和实时性优势。代码实现可直接嵌入现有YOLO架构,仅需替换P3层卷积模块。

走向CTO的路上... 948

Visual Basic语言的云计算

Visual Basic是一种由微软公司开发的编程语言,最初是作为一种快速应用程序开发工具推出的。它的语法简单,易于学习,适合快速开发各种应用程序。Visual Basic不仅支持面向对象编程,还提供了丰富的库和控件,可以方便地进行图形用户界面(GUI)设计。随着技术的进步,Visual Basic进行了多次更新和迭代,现有版本已与.NET框架紧密集成,使得它可以在更广泛的环境中使用。使用VB语言,开发者可以构建桌面应用程序、Web应用程序、数据库应用程序以及云端服务等。

2501_90467733的博客 2092

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Visual Basic语言的Web开发

Visual Basic是由微软公司在1991年推出的一种程序设计语言。它以其易于学习和使用而著称,尤其适合初学者。VB最初设计用于Windows应用程序的开发,随着技术的进步,VB6、VB.NET等版本相继推出,使得VB能够在更多环境中使用。Web开发一般是指为互联网创建应用程序和服务。它包括前端开发(用户界面)和后端开发(服务器逻辑)。前端开发通常使用HTML、CSS和JavaScript,而后端开发则涉及数据库和服务器端语言。

2501_90587107的博客 810

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Visual Basic连接 mysql_使用Visual Basic访问数据库几个注意的问题

Visual Basic 3.x For Windows是一门开发Windows应用程序很好的一种语言,使用它能够开发出大型的应用系统。它具有访问各种数据库的功能。下面将谈谈用VB访问数据库应注意的几个问题。一、如何来访问数据库。VB访问数据库提供二种方法,其一是用数据控制,其二是使用对象来访问数据库。在这两种方法中,都涉及到数据库的属性:connect,databasename,exclusiv...

weixin_39732027的博客 184
上一篇: 读写INI文件的四个函数
下一篇: 在程序中判断一个Access数据库中有几张表
vbcrack
博客等级 码龄22年 8粉丝 0原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值