利用vb.net如何在水晶报表中显示字段的列数自动调整列宽

shiyouzuanjingren 2011-03-02 08:30:30
看了阿泰的帖子
http://www.cnblogs.com/babyt/archive/2005/04/21/142309.html
在水晶报表中实现任意选择指定字段显示
对自己很有帮助
但是如何根据选择的列数动态的调整列宽一直没有解决,哪位高手可以解决下,最好有代码,我用的是VB.NET语言,谢谢

...全文
66 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
shiyouzuanjingren 2011-03-04
  • 打赏
  • 举报
回复
谢谢斑竹哈 现在还没试 忙完就试试
阿双2009 2011-03-02
  • 打赏
  • 举报
回复
http://www.developerfusion.com/tools/convert/csharp-to-vb/

这个是C#转 vb.net工具:)



''' <summary>
''' 强类型数据集,水晶报表“骨架”
''' </summary>
Private myDataSet As New DataSet1()
''' <summary>
''' “查看报表”按钮事件
''' </summary>
Private Sub btnShowReport_Click(sender As Object, e As EventArgs)
Dim DisplayColumnNum As Integer
If Not Integer.TryParse(comboBox1.Text, DisplayColumnNum) Then
'默认显示8列
DisplayColumnNum = 8
End If
'把要显示的列数以参数形式传给水晶报表
myReport.SetParameterValue("OptionNum", DisplayColumnNum)
DisplayColumnByN(DisplayColumnNum)
'这里尺寸控制是关键
crystalReportViewer1.ReportSource = myReport
End Sub
''' <summary>
''' 控制报表显示的列数及其尺寸控制
''' 无论显示多少列,控制所有列宽的总和保持一致
''' 【本方法也正是本文最最核心的片段】
''' </summary>
''' <param name="N">欲显示的列数</param>
Private Sub DisplayColumnByN(N As Integer)
'***************特 别 说 明************************************
' * 前面精确的模板设计至关重要,半点马虎不得,最终的效果都在此一举
' * 因为我们对每个对象加了左右边框,在水晶报表里面,‘单线’边框占
' * 40(di),勿忘了考虑这个宽度。
' * 在设计的时候,我把两个相邻对象之间的右边框和左边框“叠”在了一起,
' * 所以两个对象间只需考虑一个40,不用考虑2*40=80(di)单位的宽度



'由于列宽总和要保持一致,故需先获取总宽度
Dim tableWidth As Integer = 1353 * 8 + 7 * 40
'1353为对象宽度,40为边框宽度
'设置当前每一列的宽度,必须先减掉中间边框的宽度再均分
Dim columnWidth As Integer = (tableWidth - (N - 1) * 40) \ N
'标识 列序号
Dim columnOrder As Integer = 1
'遍历详细节的对象
For Each obj As ReportObject In DirectCast(myReport, CrystalReport1).Section3.ReportObjects
'列1的Left属性(105)保持不变
obj.Left = 105 + (columnWidth + 40) * (columnOrder - 1)
obj.Width = columnWidth
columnOrder += 1
Next
End Sub
''' <summary>
''' 全局水晶报表对象
''' </summary>
Private myReport As ReportDocument
''' <summary>
''' 窗体关闭后立即删除水晶报表产生的临时文件,避免过多临时文件从而导致“报表加载失败”
''' </summary>
Private Sub rptForm_FormClosing(sender As Object, e As FormClosingEventArgs)
myReport.Dispose()
End Sub
''' <summary>
''' 填充水晶报表“骨架”并为水晶报表设定数据源
''' </summary>
Private Sub rptForm_Load(sender As Object, e As EventArgs)
'往数据集“塞”测试数据
myDataSet.MultipleColTable.AddMultipleColTableRow("行一", "行一", "行一", "行一", "行一", "行一", _
"行一", "行一")
myDataSet.MultipleColTable.AddMultipleColTableRow("行二", "行二", "行二", "行二", "行二", "行二", _
"行二", "行二")
myDataSet.MultipleColTable.AddMultipleColTableRow("行三", "行三", "行三", "行三", "行三", "行三", _
"行三", "行三")
myDataSet.MultipleColTable.AddMultipleColTableRow("行四", "行四", "行四", "行四", "行四", "行四", _
"行四", "行四")
myDataSet.MultipleColTable.AddMultipleColTableRow("行五", "行五", "行五", "行五", "行五", "行五", _
"行五", "行五")

myReport = New CrystalReport1()
myReport.SetDataSource(myDataSet)
End Sub
shiyouzuanjingren 2011-03-02
  • 打赏
  • 举报
回复
谢谢luols啊 基础有点差,c#转vb.net没转过来,呵呵

4,816

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 图表区
社区管理员
  • 图表区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧