0

VB.net コードの HTML で作成したデータ ソースとテーブルがあります。テーブルのセルを作成しましたが、複数のセルとそのカウンターの作成に問題があります。無制限の行で、行ごとに 6 つのセルが必要です。追加したセルの数を追跡するカウンターを追加する必要があることはわかっていますが、その方法がわかりません。また、次のコードを使用して、テーブルのセルを 1 つだけ取得しています。私が追加していないものを教えてください。

       Dim strTable as New StringBuilder()
    strTable.Append("<table Style='border:2;border-width: 1px;'>")

    For Each dr As DataRowView In dv

        Dim crossover As String = dr("CrossoverID").ToString()
        Dim picid As String = dr("Description").ToString()
        Dim picdescrip As String = dr("DesignColor").ToString()


        strTable.Append("<tr>")
        For i As Integer = 5 - 1 To 0 Step -1

            strTable.Append(String.Format("<td>'<a href=Breakdown.aspx?p=" + crossover + "'</a>"))
            strTable.Append(String.Format("<img src='Images/" + picid + ".png' width='100' height='100'<br/>"))
            strTable.Append(String.Format(picdescrip + "</td>"))


        Next

        strTable.Append("</tr>")

    Next

    strTable.Append("</table>")
    divTable.InnerHtml = Convert.ToString(strTable)
End Sub
4

2 に答える 2

0

あなたの例では、セルの数を追跡する必要がある理由がわかりません。クロスオーバーからのデータを含むセルを 1 つだけ追加するためです。セルは名前ベースの魔女であるため、それらを入力する必要があります。 .

strTable の宣言はありませんが、テーブルが複数回追加されています。

    ' If dv.Table.Rows.Count > 0 Then - Not needed since we will get no data from For Each '
    Dim sbTable as New System.Text.StringBuilder() ' Faster then concating many strings '
    For Each dr As DataRowView In dv

        Dim crossover As String = dr("CrossoverID").ToString()
        Dim picid As String = dr("Description").ToString()
        Dim picdescrip As String = dr("DesignColor").ToString()

        sbTable.Append("<tr><td>" & crossover & "</td></tr>") ' Add one line, Separate <tr>, <td> & data & </td>, </tr> to separate lines to add multiple cells '

    Next
    If sbTable.Length > 0 Then divTable.InnerHtml = "<table style=""border:2;border-width: 1px;"">" & sbTable.ToString() & "</table>"

何度も追加する場合、StringBuilder は String よりも高速です。
& を使用して、VB.NET で文字列を一緒に追加します。これにより、他のものではなく、文字列として追加されます。

編集: OK グリッドが必要です。例で生成された HTML が無効であり、いくつかの場所で切り取られているため、出力をどのようにするかは明確ではありません。しかし、とにかく試してみます。残念ながら、VB コメントのマークアップは StackOverflow では正しく機能しません (コメントの最後にある ' で回避できます)。

Dim strTable as New StringBuilder()
Dim itmCounter As Integer = 0
Dim rowIsOpen As Boolean = False
For Each dr As DataRowView In dv

    Dim crossover As String = dr("CrossoverID").ToString()
    Dim picid As String = dr("Description").ToString()
    Dim picdescrip As String = dr("DesignColor").ToString()

    ' For every 5 items create a new row. '
    If itmCounter Mod 5 = 0 Then
        ' Since we want new row, first close any open row '
        If rowIsOpen Then strTable.Append("</tr>")

        ' Start a new row and mark row as open so we can keep track '
        strTable.Append("<tr>")
        rowIsOpen = True
    End If


    strTable.Append("<td><a href=""Breakdown.aspx?p=" & crossover & """>")
    strTable.Append("<img src=""Images/" + picid + ".png"" width=""100"" height=""100"" /><br />"))
    strTable.Append(picdescrip & "</a></td>")

    itmCounter += 1

Next

' Make sure we close any open rows '
If rowIsOpen Then strTable.Append("</tr>")

If sbTable.Length > 0 Then
    divTable.InnerHtml = "<table style=""border:2;border-width: 1px;"">" & _
        sbTable.ToString() & _
        "</table>"
End If

このパーツは、5つのアイテムごとIf itmCounter Mod 5 = 0 Thenに新しいアイテムを開閉するために使用されます。アイテムを変更するものtrであるため、これが必要です。For Each dr(同じアイテムを 5 回ループする代わりに)

HTML が有効であることも確認しましたが、何らかの htmlEncode を値に追加して、不正な値から無効な html が生成されないようにすることもできます。(二重の "" は、結果に "" を 1 つだけ出力することです)

于 2013-08-26T00:50:30.390 に答える