簡體   English   中英

GridView中的C#HTML標記

[英]C# HTML tags inside GridView

我有一個我在C#中編寫的SharePoint Web部件,用於根據用戶選擇顯示SQL Server數據。 我使用DataReader提取數據,用它填充DataSet,並將DataSet設置為GridView中的DataSource,並將該控件添加到我的頁面:

GridView outputGrid = new GridView();
outputGrid.CssClass = "OutputGrid";
outputGrid.DataSource = flipped_ds1;
outputGrid.RowDataBound += outputGrid_RowDataBound;
outputGrid.DataBind();
Controls.Add(outputGrid);

這給了我一個帶有聲明的CSS類的簡單HTML表,就是它。 我面臨的唯一問題是數據字段中的換行符根本沒有呈現。 我只是得到一個文本塊,忽略了數據庫呈現為HTML時存在的中斷。 在單步執行代碼時,我看到換行符以“\\ r \\ n”的形式作為文本進入。 我嘗試了一個正則表達式:

Regex rgx = new Regex("\r\n");
string inputStr = Convert.ToString(dr[x]);
string outputStr = rgx.Replace(inputStr, "<br />");
newRow[ds3.Tables["Bobst Specs 3"].Columns[x]] = outputStr;

雖然這確實檢測並替換了換行符,但我只是得到了“
“沒有換行符。在查看HTML源代碼時,它會在我指定的位置插入以下行”
“:

&lt;br /&gt;

我還嘗試將我的SQL查詢更改為以下內容:

SELECT REPLACE (fldCustomerName, '. ', '.' + @NewLineChar)

這顯然會帶來更多新的線條。 我可以看到它們存在,因為如果我也插入正則表達式它們會受到影響,但不會創建換行符。 我不知道如何更換這些,以及如何更換線條來實際打破。

在網格視圖中禁用所需列中的HTML呈現

<asp:BoundField DataField="MyColumn" HtmlEncode="false" />

並在現場放
作為你的文字的新行

更新:我理解的是新的線條沒有在gridview中顯示,然后你試圖通過用<br />替換\\ n來強制它,我同意你的意思。 但是br標簽轉換成html實體的下一個問題。 並且您沒有在gridview中使用強定義的列。 它是自動生成列。 如果是這樣,你所有的步驟都是正確的,還有一件事要做

在自動生成的GridView列中阻止HTML編碼

嘗試將\\ n更改為\\ r \\ n

改變<br /><br>

如果您有權訪問生成的HTML,則可以執行以下操作:

  1. 使用c#regex用“$ MYNEWLINE $”替換新行
  2. 在生成的HTML中,注入或插入以下內容:

     <script type="text/javascript"> function changeNewLines(){ var inner_html = document.getElementById('theIDofyourgeneratedtable').innerHTML; var new_inner_html = inner_html.replace('$MYNEWLINE$', '<BR/>'); document.getElementById('theIDofyourgeneratedtable').innerHTML = new_inner_html; } window.onload = changeNewLines; </script> 
  3. 您還可以使用Jquery使上述更加跨瀏覽器友好。

我有一個類似的問題,在數據中呈現“&”。 解決方案是覆蓋RowCreated以關閉生成的字段上的HtmlEncode。 幸運的是,這正如我所希望的那樣 - 它確實安全地處理了腳本標簽。

myGridView.RowCreated += MyGridView_RowCreated;
myGridView.DataSource = gridData;
myGridView.DataBind();


private void MyGridView_RowCreated(object sender, GridViewRowEventArgs e)
{
   Foreach (TableCell cell in e.Row.Cells)
   {
      BoundField field = (BoundField)((DataControlFieldCell)cell).ContainingField;
      field.HtmlEncode = false;
   }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM