HTML теги C # внутри GridView - PullRequest
       10

HTML теги C # внутри GridView

3 голосов
/ 14 апреля 2010

У меня есть веб-часть SharePoint, которую я написал на C #, которая используется для отображения данных SQL Server на основе выбора пользователя. Я извлекаю данные с помощью DataReader, заполняю им DataSet и устанавливаю этот DataSet в качестве источника данных в GridView и добавляю этот элемент управления на мою страницу:

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 вставляется следующая строка, в которой я указываю «
»:

&lt;br /&gt;

Я также попытался изменить свой SQL-запрос на что-то вроде:

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

Это, очевидно, делает больше новых строк. Я вижу, что они присутствуют, потому что, если я также вставлю регулярное выражение, они будут затронуты, но не будут создавать разрывы строк. Я не уверен, как их заменить и чем заставить строки на самом деле обрываться.

Ответы [ 4 ]

14 голосов
/ 14 апреля 2010

в виде сетки отключить рендеринг HTML в нужном столбце

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

и в поле вставьте
в качестве новой строки для текста, который у вас есть

UPDATE: что я понял, так это то, что новые строки не отображаются в виде сетки, затем вы попытались форсировать его, заменив \ n на <br />, что я с вами согласен. но следующая проблема - тег br, преобразованный в html-сущность. и вы не используете строго определенные столбцы в gridview. это автоматически генерировать столбцы. если это так, все ваши шаги правильны и еще одна вещь, которую нужно сделать

Запретить кодировку HTML в автоматически генерируемых столбцах GridView

0 голосов
/ 02 мая 2018

У меня была похожая проблема с отображением "&" в данных. Решение состоит в том, чтобы переопределить 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;
   }
}
0 голосов
/ 14 апреля 2010

Если у вас есть доступ к сгенерированному 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, чтобы сделать вышеуказанное более удобным для браузера.

0 голосов
/ 14 апреля 2010

Попробуйте изменить \ n на \ r \ n

Изменить <br /> на <br>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...