2009-01-01 5 views
0

Actuellement, je lie un ensemble de données avec un DataGrid.Sortie HTML ASP.NET Datagrid (affichage)

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

Puisque j'insère du code html, pourquoi cela n'est pas converti en html?

Le résultat de la sortie est tout le texte. (Supposons qu'une icône est affichée sans URL de redirection)

Je ne sais pas pourquoi.

Merci

Répondre

2

est ici un moyen rapide de résoudre votre problème sans l'aide du modèle de contenu.

D'abord, ajoutez l'événement RowDataBound à votre GridView. Deuxièmement, ajoutez le code du gestionnaire d'événements en utilisant votre logique. RowDataBound événement se déclenchera pour chaque ligne, nous ne devons pas utiliser foreach. J'utilise C# mais vous pouvez facilement le convertir en 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>" 
     } 
    } 
} 

Comme une note de côté, vous voudrez peut-être changer

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

et définir l'image d'arrière-plan en utilisant CSS.Pour que GridView génère un code HTML, tout ce que vous avez à faire est de définir le paramètre HtmlEncode sur false dans le champ lié souhaité.

1

Si vous utilisez un gridview, vous voudrez peut-être utiliser comme prévu.

Vous devez avoir un modèle de contenu.

Si vous devez effectuer un formatage basé sur des valeurs, vous le faites dans l'événement rowdatabound.

Je pense que vous obtenez le comportement "inattendu" car gridview peut se lier à un large éventail de collections (Array, Hashtable, Dataset, etc.) et gère comment il lie spécifiquement les données.

Le but de gridview est de faire le formatage dans la section html de la page ... Il y a beaucoup de formatage de fantaisie que vous pouvez faire là-bas.

Si vous avez l'intention d'utiliser gridviews, il est bon de se familiariser avec onrowdatabound et événements onrowcommand ...

RAPIDE CORRECTIF:

Je suppose que cela pourrait prendre un peu de temps pour apprendre à faire la La bonne façon. En attendant, si vous voulez une solution rapide à votre problème avec le moins de changement:

  • utiliser un asp: contrôle littéral pour savoir où vous voulez votre image
  • changer votre requête dans le db pour remplacer le la valeur de retour avec le code html au lieu de la valeur 0/1
  • lier le littéral à la valeur de retour et passez votre section de mise en forme actuelle
2

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