Comment rendre le code HTML décodé dans une cellule (c’est-à-dire un fichier) de la cellule GridView

Je lie un GridView à une requête LINQ. Certains des champs dans les objects créés par l’instruction LINQ sont des chaînes et doivent contenir de nouvelles lignes.

Apparemment, HTML GridView code tout dans chaque cellule, je ne peux donc pas insérer
pour créer une nouvelle ligne dans une cellule.

Comment puis-je dire à GridView de ne pas coder HTML le contenu des cellules?

Peut-être que je devrais utiliser un contrôle différent à la place?

Pouvez-vous vous abonner à l’événement RowDataBound? Si vous le pouvez, vous pouvez exécuter:

if (e.Row.RowType == DataControlRowType.DataRow) { ssortingng decodedText = HttpUtility.HtmlDecode(e.Row.Cells[0].Text); e.Row.Cells[0].Text = decodedText; } 

Pourquoi ne pas définir la propriété HtmlEncode sur false ? Pour moi, c’est beaucoup plus simple.

  

Les nouvelles lignes normales sont-elles conservées en sortie? Si tel est le cas, vous pouvez envoyer les nouvelles lignes et utiliser le style css white-space: pre , qui conserverait les nouvelles lignes, les espaces et les tabs.

 protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { for (int i = 0; i < e.Row.Cells.Count; i++) { if (e.Row.RowType == DataControlRowType.DataRow) { string decodedText = HttpUtility.HtmlDecode(e.Row.Cells[i].Text); e.Row.Cells[i].Text = decodedText; } } } 

La réponse de Booysen fonctionne, mais seulement pour une colonne. Si vous exécutez une boucle dans l’événement RowDataBound, vous pouvez remplacer la variable [0] par une variable et le faire fonctionner sur chaque colonne si vous le souhaitez. Voici ce que j’ai fait:

 protected void gridCart_RowDataBound(object sender, GridViewRowEventArgs e) { for (int i = 1; i < 4; i++) { if (e.Row.RowType == DataControlRowType.DataRow) { string decode = HttpUtility.HtmlDecode(e.Row.Cells[i].Text); e.Row.Cells[i].Text = decode; } } } 

Le mien est délibérément commencé à 1 en raison de mes données, mais évidemment cela fonctionnera avec tout ce dont vous avez besoin.

J’ai contourné cela en insérant d’abord les données dans ma table sql-server à partir d’une zone de texte multiligne à l’aide de

  replace (txt = Replace(txt, vbCrLf,"
"))

Ensuite, j’ai utilisé la solution de Ray Booysen pour la renvoyer à ma grid:

  Protected Sub grdHist_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles grdHist.RowDataBound Dim col1 As Ssortingng = HttpUtility.HtmlDecode(e.Row.Cells(2).Text) e.Row.Cells(2).Text = col1 End Sub 
 protected void gvHead_OnRowDataBound(object sender, GridViewRowEventArgs e) { for (int i = 0; i < e.Row.Cells.Count; i++) e.Row.Cells[i].Text = HttpUtility.HtmlDecode(e.Row.Cells[i].Text); } 

Vous devez vous lier à l’événement DataBoundGrid et modifier le rendu des colonnes pour lesquelles vous souhaitez restituer du code HTML.

 public event EventHandler DataBoundGrid { add { ctlOverviewGridView.DataBound += value; } remove { ctlOverviewGridView.DataBound -= value; } } ctlOverview.DataBoundGrid += (sender, args) => { ((sender as ASPxGridView).Columns["YourColumnName"] as GridViewDataTextColumn).PropertiesTextEdit.EncodeHtml = false; }; 

@Ray Booysen répond, mais dans certains cas, HtmlDecode () ne peut pas gérer votre problème. vous pouvez utiliser UrlDecode () au lieu de HtmlDecode ().
voici une autre solution:

 if (e.Row.RowType == DataControlRowType.DataRow) { ssortingng decodedText = HttpUtility.UrlDecode(e.Row.Cells[0].Text); e.Row.Cells[0].Text = decodedText; }