You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

XRLabel文本仅在Letter纸张类型显示,其他类型无内容问题排查

报表标签仅Letter纸显示文本的问题排查与解决

我需要在报表页面显示标签,每个标签展示表达式拼接的数据源信息,同时支持通过自定义选项设置边距、宽高和间距来计算页面尺寸。但现在只有纸张类型ID=3(Letter)时XRLabel的文本能正常显示,切换到A4或其他纸张类型时,页面只显示标签区块边框,没有文本内容。

控件创建代码

DetailBand detail = new DetailBand();
report.Bands.Add(detail);
XRPanel panel = new XRPanel();
panel.CanGrow = false;
detail.Controls.Add(panel);
panel.WidthF = labelWidth;
panel.HeightF = labelHeight;
panel.Borders = BorderSide.All;
panel.Name = "Panel1";

XRLabel lblMail = new XRLabel();
lblMail.Name = "lblMail";
lblMail.TextAlignment = TextAlignment.MiddleCenter;
lblMail.HeightF = labelHeight;
lblMail.WidthF = labelWidth;
lblMail.CanGrow = false;
lblMail.CanShrink = false;
lblMail.Multiline = true;

panel.Controls.Add(lblMail);

数据源填充代码

XRLabel lblMail = (XRLabel)labelReport.FindControl("lblMail", false);
string expression = "[OwnerName] + Char(10) + [Address1] + Char(10) + [Address2] + Char(10) + [City]" +
    " + ',' + [State] + ' ' + [Zip]";
ExpressionBinding expressionBinding = new ExpressionBinding("BeforePrint", "Text", expression);
lblMail.ExpressionBindings.Add(expressionBinding);

labelReport.DataSource = reportSource;

非Letter纸张类型下,页面仅显示带边框的空白标签区块,无文本内容。


排查与解决方向

  1. 检查页面尺寸计算逻辑
    切换纸张类型时,自定义计算的labelWidth和labelHeight可能出现异常:

    • 若计算后的尺寸过小,加上CanGrow=false和CanShrink=false的限制,文本会被完全隐藏
    • 确认切换纸张时,labelWidth和labelHeight是否根据新纸张尺寸重新计算,并正确赋值给panel和label控件
  2. 整合表达式绑定到控件创建流程
    当前通过FindControl获取控件后绑定表达式,若切换纸张时报表重新生成控件,原绑定会丢失:

    • 将表达式绑定逻辑直接整合到控件创建代码中,确保每次生成控件时都完成绑定:
      XRLabel lblMail = new XRLabel();
      lblMail.Name = "lblMail";
      lblMail.TextAlignment = TextAlignment.MiddleCenter;
      lblMail.HeightF = labelHeight;
      lblMail.WidthF = labelWidth;
      lblMail.CanGrow = false;
      lblMail.CanShrink = false;
      lblMail.Multiline = true;
      
      // 直接在控件创建时添加表达式绑定
      string expression = "[OwnerName] + Char(10) + [Address1] + Char(10) + [Address2] + Char(10) + [City]" +
          " + ',' + [State] + ' ' + [Zip]";
      ExpressionBinding expressionBinding = new ExpressionBinding("BeforePrint", "Text", expression);
      lblMail.ExpressionBindings.Add(expressionBinding);
      
      panel.Controls.Add(lblMail);
      
  3. 确保纸张切换后数据源重新绑定
    切换纸张类型后,需确认labelReport.DataSource被正确重新赋值,避免因数据源丢失导致表达式无法解析数据

  4. 调试表达式解析结果
    在非Letter纸张类型下,添加手动拼接文本的调试逻辑,判断是绑定问题还是尺寸问题:

    // 给lblMail绑定BeforePrint事件
    private void lblMail_BeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e)
    {
        XRLabel label = sender as XRLabel;
        if (label != null)
        {
            var currentRow = labelReport.GetCurrentRow();
            // 手动拼接文本测试数据是否能正常获取
            string text = $"{DataBinder.Eval(currentRow, "OwnerName")}\n{DataBinder.Eval(currentRow, "Address1")}\n{DataBinder.Eval(currentRow, "Address2")}\n{DataBinder.Eval(currentRow, "City")}, {DataBinder.Eval(currentRow, "State")} {DataBinder.Eval(currentRow, "Zip")}";
            label.Text = text;
        }
    }
    

内容的提问来源于stack exchange,提问作者Konstantin Didenko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 20:15:03