-2
Public Function GenerateHtmlReport(ByVal ResultDataset As System.Data.DataSet) As String Implements IValidation.GenerateHtmlReport
        Dim _StrBuil As New StringBuilder()
        Dim clsHtmlBuilder As New HtmlBuilder()
        Try
            _StrBuil.AppendLine(Space(2) & clsHtmlBuilder.AddHr())
            _StrBuil.AppendLine(Space(3) & clsHtmlBuilder.TextBig(ResultDataset.DataSetName))
            _StrBuil.AppendLine(Space(5) & clsHtmlBuilder.AddLineBreak)

            For Each _Tbl As DataTable In ResultDataset.Tables
                If _Tbl Is Nothing OrElse _Tbl.Rows.Count = 0 Then Continue For
                _StrBuil.AppendLine(Space(8) & clsHtmlBuilder.StartTable())

                'set Table Header
                'set Table Name

                _StrBuil.AppendLine(Space(15) & clsHtmlBuilder.StartH4())
                _StrBuil.AppendLine(Space(20) & _Tbl.TableName)
                _StrBuil.AppendLine(Space(15) & clsHtmlBuilder.EndH4())
                _StrBuil.AppendLine(Space(25) & clsHtmlBuilder.StartTableRow())

                'set Column Name
                For Each _col As DataColumn In _Tbl.Columns
                    _StrBuil.AppendLine(Space(35) & clsHtmlBuilder.StartTableHeader())
                    _StrBuil.AppendLine(Space(45) & _col.ColumnName)
                    _StrBuil.AppendLine(Space(35) & clsHtmlBuilder.EndTableHeader())

                Next
                _StrBuil.AppendLine(Space(25) & clsHtmlBuilder.EndTableRow())

                'set Table Rows
                For Each _dr As DataRow In _Tbl.Rows
                    _StrBuil.AppendLine(Space(25) & clsHtmlBuilder.StartTableRow())
                    For Each _col As DataColumn In _Tbl.Columns
                        If (Space(45) & _col.ColumnName = "Result") Then
                            _StrBuil.AppendLine(Space(35) & clsHtmlBuilder.StartTableCell())
                        Else

                            _StrBuil.AppendLine(Space(35) & clsHtmlBuilder.StartTableCell())

                        End If
                        _StrBuil.AppendLine(Space(45) & _dr(_col.ColumnName).ToString())
                        _StrBuil.AppendLine(Space(35) & clsHtmlBuilder.EndTableCell())

                    Next

                    _StrBuil.AppendLine(Space(25) & clsHtmlBuilder.EndTableRow())
                Next

                _StrBuil.AppendLine(Space(8) & clsHtmlBuilder.EndTable())
            Next
            _StrBuil.AppendLine(Space(5) & clsHtmlBuilder.AddLineBreak)
            _StrBuil.AppendLine(Space(2) & clsHtmlBuilder.AddHr())
        Catch ex As Exception
            clsCommon.writeErrorLog("Error in Report Generation", "RuleSet2", "GenerateHtmlReport")
            Throw ex
        End Try
        Return _StrBuil.ToString()
    End Function
End Class

ソースコード:

 <td nowrap = "nowrap">
         4F0B52DC0001
 </td>
 <td nowrap = "nowrap">
         C006411
 </td>
 <td nowrap = "nowrap">
         Christiansen
 </td>
 <td nowrap = "nowrap">
         Cathy
 </td>
 <td nowrap = "nowrap">
         19570406
 </td>
 <td nowrap = "nowrap">

 </td>
4

1 に答える 1

1

次のようなものが欲しいということですか?

<td nowrap = "nowrap">4F0B52DC0001</td>
<td nowrap = "nowrap">C006411</td>
<td nowrap = "nowrap">Christiansen</td>
<td nowrap = "nowrap">Cathy</td>
<td nowrap = "nowrap">19570406</td>
<td nowrap = "nowrap"></td> 

これを試して:

For Each _col As DataColumn In _Tbl.Columns
    If (Space(45) & _col.ColumnName = "Result") Then
        _StrBuil.Append(Space(35) & clsHtmlBuilder.StartTableCell())
    Else
        _StrBuil.Append(Space(35) & clsHtmlBuilder.StartTableCell())
    End If
    _StrBuil.Append(_dr(_col.ColumnName).ToString())
    _StrBuil.AppendLine(clsHtmlBuilder.EndTableCell())
Next 

(AppendLineの代わりにAppendを使用してください)

より明確な質問をしようとすると、より適切な回答者が得られる可能性があります。


編集:
あなたのコメントに応じて、「属性」値が空白またはnullでないことを確認することにより、最後の(空の)テーブルセル間のギャップを取り除くことができます。問題の原因となっているコード行は次のとおりです。

_StrBuil.AppendLine(Space(45) & _dr(_col.ColumnName).ToString()) 

_dr(_col.ColumnName)これにより、 null以外/空白以外の値を表すかどうかに関係なく、テキストの行(末尾に改行文字が含まれる)が出力されます。_dr(_col.ColumnName)nullでも空白でもない場合にのみ実行されることを保証するifブロックの場合、このサテメントをラップします。を使用.Trim()して、値から空白を削除String.IsNullOrEmpty()し、文字列で表される空白以外の値があることを確認できます。


編集:
詳細については、次のリンクを参照してください。

達成したいことを考えて、それを一連のステップとして書き留めます(おそらく最初に紙に、次にコードに)。それができない場合は、プログラムできません(ヒント:ほとんどの人がプログラムできます)。

于 2012-09-10T17:46:15.127 に答える