Frage

Derzeit bin ich verbindlich einen Datensatz mit einem Datagrid.

ds = query.ExecuteReadQuery("select PollQuestionText as 'Survey Question',    
PollAnswer1Text as 'Selection 1', PollAnswer2Text as 'Selection 2', PollAnswer3Text  
as 'Selection 3', PollEnabled 'Status'  from tbl_pollquestions")

For Each row As Data.DataRow In ds.Tables(0).Rows
        If row.ItemArray(4).ToString = "0" Then
            row.ItemArray."<a href=""""> <img src=""img/box_icon_edit_pencil1.gif"" border=""0""> </a>"

        ElseIf row.ItemArray(4).ToString = "1" Then
            row.Item(4) = "<a href=""""> <img src=""img/box_icon_edit_pencil2.gif"" border=""0""> </a>"
        End If

    Next

GridView1.DataSource = ds

GridView1.DataBind()

Da ich HTML-Code bin Einfügen, warum dies nicht in HTML konvertiert werden?

Der Ausgang ist der gesamte Text. (Ein Symbol Angenommen wird ohne Redirect-URL angezeigt wird)

Ich weiß nicht, warum.

Danke

War es hilfreich?

Lösung

Hier ist ein schneller Weg, um Ihr Problem zu lösen, ohne Inhalt Vorlage.

Fügen Sie zunächst RowDataBound Termin in Ihrem Gridview.

<asp:GridView ID="GridView1" runat="server" onrowdatabound="GridView1_RowDataBound">
</asp:GridView>

Zweitens fügen Sie den Code für den Event-Handler Ihre Logik. RowDataBound Veranstaltung wird für jede Zeile ausgelöst, wir müssen nicht foreach verwenden. Ich bin mit C #, aber Sie können es zu VB leicht umwandeln.

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) {    
    if (e.Row.RowType == DataControlRowType.DataRow) {        
        if (e.Row.Cells[4].Text == "0") {            
            e.Row.Cells[4].Text = "<a href=''> <img src='img/box_icon_edit_pencil1.gif' border='0'> </a>"
        } else {
            e.Row.Cells[4].Text = "<a href=''> <img src='img/box_icon_edit_pencil2.gif' border='0'> </a>"
        }
    }
}

Als Randbemerkung, könnten Sie ändern möchten

<a href=''> <img src='img/box_icon_edit_pencil1.gif' border='0'> </a>
<a href=''> <img src='img/box_icon_edit_pencil2.gif' border='0'> </a>

<a href="" class="Pencil1"></a>
<a href="" class="Pencil2"></a>

und stellen Sie das Hintergrundbild mit CSS.

Andere Tipps

Um die Gridview zur Ausgabe von HTML zu bekommen, alles, was Sie tun müssen, um die Htmlencode-Parameter auf false gesetzt ist auf das gewünschte Feld gebunden.

<asp:BoundField DataField="Question" HeaderText="Question" HtmlEncode="false" />

Wenn Sie eine Gridview verwenden, möchten Sie vielleicht verwenden, wie es beabsichtigt war.

Sie sollten eine Inhaltsvorlage haben.

Wenn Sie die Formatierung tun müssen, basierend auf den Werten, die Sie tun es in dem RowDataBound Ereignisse.

Ich glaube, Sie das „unerwartete“ Verhalten bekommen, weil gridview auf eine breite Palette von Sammlungen binden kann (Array, Hashtable, Dataset, etc.) und es schafft, wie es speziell um die Daten bindet.

Die Absicht ist es, die gridview Formatierung im HTML-Bereich der Seite zu tun ... Es gibt viel Phantasie ist die Formatierung Sie können es tun.

Wenn Sie beabsichtigen, Gridviews zu verwenden, es ist gut, mit OnRowDataBound vertraut zu sein und onrowcommand Veranstaltungen ...

QUICKFIX:

Ich denke, es könnte eine wenig Zeit in Anspruch nehmen zu lernen, wie es den richtigen Weg zu tun. In der Zwischenzeit, wenn Sie eine schnelle Lösung für Ihr Problem mit der geringsten Menge an Veränderung wollen:

  • verwenden, um einen asp: wörtliche Kontrolle für, wo Sie Ihr Bild
  • wollen
  • Ihre Abfrage in der db ändert den Rückgabewert mit dem html anstelle des 0/1 Wert
  • ersetzen
  • binden die wörtliche auf den Rückgabewert und überspringen Ihre aktuelle Formatierung Abschnitt
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top