我有一个用C#编写的SharePoint Web部件,用于根据用户选择显示SQL Server数据。我使用DataReader提取数据,用它填充DataSet,并在GridView中将DataSet设置为DataSource并将该控件添加到我的页面:
GridView outputGrid = new GridView();
outputGrid.CssClass = "OutputGrid";
outputGrid.DataSource = flipped_ds1;
outputGrid.RowDataBound += outputGrid_RowDataBound;
outputGrid.DataBind();
Controls.Add(outputGrid);
这给了我一个简单的HTML表,其中包含一个声明的CSS类,就是它。我面临的唯一问题是数据字段中的换行符根本没有呈现。我只是得到一个文本块,忽略了数据库呈现为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源代码时,它会在我指定“
”的位置插入以下行:
<br />
我还尝试将我的SQL查询更改为:
SELECT REPLACE (fldCustomerName, '. ', '.' + @NewLineChar)
这显然会带来更多新的线条。我可以看到它们存在,因为如果我也插入正则表达式它们会受到影响,但不会创建换行符。我不知道如何更换这些,以及如何更换线条以实际破坏。
答案 0 :(得分:14)
禁用所需列中的HTML呈现
<asp:BoundField DataField="MyColumn" HtmlEncode="false" />
并在字段中将
作为您拥有的文本的新行
更新:
我理解的是新的线条没有显示在gridview中,然后你试图通过用<br />
替换\ n来强制它,我同意你的意见。但是br标签转换成html实体的下一个问题。并且您没有在gridview中使用强定义的列。它是自动生成列。
如果是这样,你所有的步骤都是正确的,还有一件事要做
答案 1 :(得分:0)
尝试将\ n更改为\ r \ n
将<br />
更改为<br>
答案 2 :(得分:0)
如果您有权访问生成的HTML,则可以执行以下操作:
在生成的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>
您还可以使用Jquery使上述浏览器更加友好。
答案 3 :(得分:0)
我有类似的问题渲染&#34;&amp;&#34;在数据中。解决方案是覆盖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;
}
}