Reputation: 1335
I have a SharePoint web part that I wrote in C# which is used to display SQL Server data based on user selections. I pull the data with a DataReader, fill a DataSet with it, and set that DataSet as the DataSource in a GridView and add that control to my page:
GridView outputGrid = new GridView();
outputGrid.CssClass = "OutputGrid";
outputGrid.DataSource = flipped_ds1;
outputGrid.RowDataBound += outputGrid_RowDataBound;
outputGrid.DataBind();
Controls.Add(outputGrid);
This gives me a simple HTML table with a declared CSS class and that's about it. The only problem I'm facing is that line breaks in the data fields are not being rendered at all. I'm simply getting a block of text that ignores the breaks that are present in the database when it's rendered to HTML. In stepping through my code, I see that the newlines are coming in as text in the form of "\r\n". I tried a regex:
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;
While that does detect and replace the newlines, I merely get the text "
" with no line breaks. In viewing the HTML source, it is inserting the following line where I specify "
":
<br />
I also tried changing my SQL query to something along the lines of:
SELECT REPLACE (fldCustomerName, '. ', '.' + @NewLineChar)
This apparently renders more newlines. I can see that they are present, because if I also insert the regex they are affected, but do not create line breaks. I'm not sure how to replace these, and what with, to get the lines to actually break.
Upvotes: 3
Views: 27583
Reputation: 1513
I had a similar problem rendering "&" in the data. The solution is to override RowCreated to turn off HtmlEncode on the generated field. Fortunately this worked just as I wanted - it did handled script tags securely.
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;
}
}
Upvotes: 0
Reputation: 987
If you have access to the generated HTML, you could do the following:
In the generated HTML, inject or insert the following:
<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>
You could also use Jquery to make the above more cross-browser friendly.
Upvotes: 0
Reputation: 5406
in the grid view disable the HTML render in the wanted column
<asp:BoundField DataField="MyColumn" HtmlEncode="false" />
and in the field put
as new line for the text you have
UPDATE:
what I understood is the new lines are not showing in the gridview, then you tried to force it by replacing \n with <br />
which I agree with you in it. but the next problem the br tag converted into html entity. and you are not using strongly defined columns in gridview. it is auto-generate columns.
if that so, all your steps are right and one more thing to do
Prevent HTML encoding in auto-generated GridView columns
Upvotes: 15