ASP.NET Datagrid HTML-вывод (отображение) - PullRequest
0 голосов
/ 02 января 2009

В настоящее время я связываю набор данных с сеткой данных.

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()

Поскольку я вставляю html-код, почему он не преобразуется в html?

Результатом вывода является весь текст. (Предположим, значок отображается без URL-адреса перенаправления)

Я не знаю почему.

Спасибо

Ответы [ 3 ]

2 голосов
/ 02 января 2009

Вот один быстрый способ решить вашу проблему без использования шаблона содержимого.

Сначала добавьте событие RowDataBound в GridView.

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

Во-вторых, добавьте код для обработчика событий, используя вашу логику. Событие RowDataBound будет запускаться для каждой строки, нам не нужно использовать foreach. Я использую C #, но вы можете легко конвертировать его в VB.

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>"
        }
    }
}

В качестве примечания вы можете изменить

<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>

и установите фоновое изображение с помощью CSS.

2 голосов
/ 27 октября 2009

Чтобы заставить GridView выводить HTML, все, что вам нужно сделать, это установить для параметра HtmlEncode значение false в нужном связанном поле.

<asp:BoundField DataField="Question" HeaderText="Question" HtmlEncode="false" />
1 голос
/ 02 января 2009

Если вы используете gridview, вы можете использовать его по назначению.

У вас должен быть шаблон контента.

Если вам нужно выполнить форматирование на основе значений, вы делаете это в событии, связанном с строкой строки.

Я думаю, что вы получаете "неожиданное" поведение, потому что gridview может связываться с широким набором коллекций (Array, Hashtable, Dataset и т. Д.) И управляет тем, как он конкретно связывает данные.

Цель gridview - сделать форматирование в разделе html страницы ... Там есть много необычного форматирования, которое вы можете сделать там.

Если вы намереваетесь использовать gridviews, полезно ознакомиться с событиями onrowdatabound и onrowcommand ...

БЫСТРЫЙ ИСПРАВЛЕНИЕ:

Я думаю, может потребоваться некоторое время, чтобы научиться делать это правильно. Тем временем, если вы хотите быстро решить вашу проблему с наименьшим количеством изменений:

  • используйте элемент управления asp: literal для того, где вы хотите ваше изображение
  • изменить ваш запрос в БД, чтобы заменить возвращаемое значение HTML вместо значения 0/1
  • привязать литерал к возвращаемому значению и пропустить текущий раздел форматирования
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...