我有一个gridview BoundField需要显示字符串中存在的值 - 不应用HTML格式化并保留其间的多个空格(就像文本框的行为一样)
我尝试了以下方法,但没有奏效。我们怎样才能让它像文本框一样工作?
MARKUP
<form id="form1" runat="server">
<asp:TextBox ID="Textbox1" runat="server" EnableViewState="false"></asp:TextBox>
<asp:TextBox ID="Textbox2" runat="server" EnableViewState="false"></asp:TextBox>
<asp:TextBox ID="Textbox3" runat="server" EnableViewState="false"></asp:TextBox>
<asp:TextBox ID="Textbox4" runat="server" EnableViewState="false"></asp:TextBox>
<asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="false">
<Columns>
<asp:BoundField DataField="Name" HeaderText="B" DataFormatString="<pre>{0}</pre>"
HtmlEncode="true" ItemStyle-BackColor="Gray" />
<asp:BoundField DataField="Name" HeaderText="D" HtmlEncode="true" ItemStyle-BackColor="Cyan" />
<asp:BoundField DataField="Name" HeaderText="E" ItemStyle-BackColor="Orange" />
<asp:BoundField DataField="Name" HeaderText="C" HtmlEncode="false" ItemStyle-BackColor="Teal" />
<asp:BoundField DataField="Name" HeaderText="A" DataFormatString="<pre>{0}</pre>"
HtmlEncode="false" ItemStyle-BackColor="Yellow" />
</Columns>
</asp:GridView>
</form>
C#CODE
protected void Page_Load(object sender, EventArgs e)
{
string selectedVal1 = "a b";
string selectedVal2 = "<br />";
string selectedVal3 = "<script 1>";
string selectedVal4 = "<script>";
this.Textbox1.Text = selectedVal1;
this.Textbox2.Text = selectedVal2;
this.Textbox3.Text = selectedVal3;
this.Textbox4.Text = selectedVal4;
DataTable table = new DataTable();
table.Columns.Add("Name", typeof(string));
table.Rows.Add(selectedVal1);
table.Rows.Add(selectedVal2);
table.Rows.Add(selectedVal3);
table.Rows.Add(selectedVal4);
GridView2.DataSource = table;
GridView2.DataBind();
}
HTML
<input name="Textbox1" type="text" value="a b" id="Textbox1" />
<input name="Textbox2" type="text" value="<br />" id="Textbox2" />
<input name="Textbox3" type="text" value="<script 1>" id="Textbox3" />
<input name="Textbox4" type="text" value="<script>" id="Textbox4" />
<div>
<table cellspacing="0" rules="all" border="1" id="GridView2" style="border-collapse:collapse;">
<tr>
<th scope="col">B</th><th scope="col">D</th><th scope="col">E</th><th scope="col">C</th><th scope="col">A</th>
</tr><tr>
<td style="background-color:Gray;"><pre>a b</pre></td><td style="background-color:Cyan;">a b</td><td style="background-color:Orange;">a b</td><td style="background-color:Teal;">a b</td><td style="background-color:Yellow;"><pre>a b</pre></td>
</tr><tr>
<td style="background-color:Gray;"><pre><br /></pre></td><td style="background-color:Cyan;"><br /></td><td style="background-color:Orange;"><br /></td><td style="background-color:Teal;"><br /></td><td style="background-color:Yellow;"><pre><br /></pre></td>
</tr><tr>
<td style="background-color:Gray;"><pre><script 1></pre></td><td style="background-color:Cyan;"><script 1></td><td style="background-color:Orange;"><script 1></td><td style="background-color:Teal;"><script 1></td><td style="background-color:Yellow;"><pre><script 1></pre></td>
</tr><tr>
<td style="background-color:Gray;"><pre><script></pre></td><td style="background-color:Cyan;"><script></td><td style="background-color:Orange;"><script></td><td style="background-color:Teal;"><script></td><td style="background-color:Yellow;"><pre><script></pre></td>
</tr>
</table>
</div>
答案 0 :(得分:1)
如果您想要值中的确切空格,那么您必须在设计视图中绑定Gridview上的字段...
尝试如下..
DataFormatString="<pre>{0}</pre>" // - this formating displays the values with spaces
请注意,我们正在关闭BoundField中的HTML编码(HtmlEncode="False"
),因为我们使用的是pre
代码。
pre元素中的文本以固定宽度字体(通常为Courier)显示,并保留空格和换行符。
来自BoundField.HtmlEncode Property
HTML编码字段值有助于防止显示跨站点脚本攻击和恶意内容。应尽可能启用此属性。
来自HttpServerUtility.HtmlEncode Method
如果文本字符串包含小于号(&lt;)或大于号(&gt;),则浏览器会将这些字符解释为HTML标记的左括号或右括号。当字符是HTML编码时,它们被转换为字符串&lt;和&gt;,这会导致浏览器正确显示小于号和大于号。
在设计视图中设置gridview,如下所示..
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
<Columns>
<asp:BoundField DataField="Name" HeaderText ="Name" DataFormatString="<pre>{0}</pre>"
HtmlEncode="False" />
</Columns>
</asp:GridView>
在C#Code Behind中(这是我的例子......你可以自己申请......)
DataTable table = new DataTable();
table.Columns.Add("Name", typeof(string));
table.Rows.Add( "Ab Sdf");
GridView1.DataSource = table;
GridView1.DataBind();
,其输出如下......
答案 1 :(得分:0)
默认情况下,浏览器删除连续的空格,只留下1个HTML文本。如果您希望显示所有空格,则在网格视图中显示时,您需要将其替换为不间断的空格字符“&amp; nbsp”
答案 2 :(得分:0)
我在RowDataBound事件中使用了以下C#代码
e.Row.Cells[(int)logDescriptionIndex].Text =
e.Row.Cells[(int)logDescriptionIndex].Text.Replace(" ", " ");
请注意以下内容
注意:以下是基于另一个网格视图;不适用于有问题的gridview。使用有问题的gridview所需的微小更改
<强> CODE 强>
protected void SearchLogsGridRowDataBound(object sender, GridViewRowEventArgs e)
{
if (e != null)
{
if (e.Row.RowType == DataControlRowType.Header)
{
if (logDescriptionIndex == null)
{
int index = 0;
foreach (TableCell cell in e.Row.Cells)
{
if (cell.Controls[0] != null)
{
if (String.Equals(((LinkButton)(cell.Controls[0])).Text.Trim(), UIConstants.LogDescriptionHeader))
{
logDescriptionIndex = index;
}
}
index++;
}
}
}
if (e.Row.RowType == DataControlRowType.DataRow)
{
if (logDescriptionIndex != null)
{
// Replace white spaces with HTML space.
// This is to handle multiple white spaces between two characters
e.Row.Cells[(int)logDescriptionIndex].Text = e.Row.Cells[(int)logDescriptionIndex].Text.Replace(" ", " ");
}
}
}
}