【问题标题】:rdlc report in spacerdlc 太空报告
【发布时间】:2016-01-22 13:49:15
【问题描述】:

我在 WPF 应用程序中使用访问 (oledb) 数据库,并且正在开发 RDLC 报告。而且我有一些问题。

我有这个数据 IN20102029382818 的文本数据类型。它是 16 个字符。我想在 1 行中显示 10 个字符,在 2 行中显示 6 个字符,并在这些字符之间放置一些空格。我想在下面显示这些数据。

I N 2 0 1 0 2 0 2 9 
3 8 2 8 1 8

在这里,我使用文本框在 RDLC 报告中显示这些数据。如果我能得到想要的结果,那么我可以为这个结果使用任何东西。我有来自 access 数据库的数据,但我不知道有什么方法可以做这些事情。

【问题讨论】:

    标签: c# wpf oledb rdlc


    【解决方案1】:

    这是一个使用 RDLC Expression 的解决方案,您只能使用 16 个字符的字符串:

    =Mid(Left(Fields!YourField.Value, 10), 1, 1) +
    Space(1) +
    Mid(Left(Fields!YourField.Value, 10), 2, 1) +
    Space(1) +
    Mid(Left(Fields!YourField.Value, 10), 3, 1) +
    Space(1) +
    Mid(Left(Fields!YourField.Value, 10), 4, 1) +
    Space(1) +
    Mid(Left(Fields!YourField.Value, 10), 5, 1) +
    Space(1) +
    Mid(Left(Fields!YourField.Value, 10), 6, 1) +
    Space(1) +
    Mid(Left(Fields!YourField.Value, 10), 7, 1) +
    Space(1) +
    Mid(Left(Fields!YourField.Value, 10), 8, 1) +
    Space(1) +
    Mid(Left(Fields!YourField.Value, 10), 9, 1) +
    Space(1) +
    Mid(Left(Fields!YourField.Value, 10), 10, 1) +
    System.Environment.NewLine +
    Mid(Right(Fields!YourField.Value, 6), 1, 1) +
    Space(1) +
    Mid(Right(Fields!YourField.Value, 6), 2, 1) +
    Space(1) +
    Mid(Right(Fields!YourField.Value, 6), 3, 1) +
    Space(1) +
    Mid(Right(Fields!YourField.Value, 6), 4, 1) +
    Space(1) +
    Mid(Right(Fields!YourField.Value, 6), 5, 1) +
    Space(1) +
    Mid(Right(Fields!YourField.Value, 6), 6, 1)
    

    这是使用VB.NET 的更清洁的解决方案;您可以在 C# 中翻译它并在您的 ReportDataSource 上使用它,然后将数据传递给 ReportViewer

    Dim strYourString As String = "IN20102029382818"
    
    Dim strYourStringFormatted As String = String.Join(Space(1), Array.ConvertAll(Strings.Left(strYourString, 10).ToCharArray, Function(strInput) strInput.ToString)) _
        & System.Environment.NewLine _
        & String.Join(Space(1), Array.ConvertAll(Strings.Right(strYourString, 6).ToCharArray, Function(strInput) strInput.ToString))
    
    MsgBox(strYourStringFormatted)
    

    您还可以对任何其他字符串使用第二种解决方案的变体;即:

    Dim strYourString As String = "Test1 Test2 Test3"
    
    Dim strYourStringFormatted As String = Strings.Replace( _
        String.Join(Space(1), Array.ConvertAll(strYourString.ToCharArray, Function(strInput) strInput.ToString)), _
        Space(3), System.Environment.NewLine)
    
    MsgBox(strYourStringFormatted)
    

    【讨论】:

    • 我还有一个问题,请帮我解答。现在,我有一列 FIRSTNAME。同样,我想在报告文件上打印名字数据。我尝试这种方式,但出现以下错误:- textrun 'FirstName.Paragraphs[0].TextRuns[0]' 的值表达式包含错误:[BC30201] 预期表达式。我认为我收到此错误是因为名字字符不固定。
    • 我知道这个方法兄弟。
    • 答案已更新为 VB.NET 中的替代解决方案;也许他们也可以解决您的 FIRSTNAME 列问题。
    • 这里,我有问题。我有 NAME 列,我想以同样的方式打印它。但它的长度不固定。那么我该怎么做呢?我想在一行打印 15 个字符,在第二行打印 18 个字符。请帮帮我。当您给我第一个解决方案时,我尝试了它,但它并不完美。有些字符在第二行重复,这就是问题所在。