Introduction
We often observe a gridview "bug" that we are saving the string data in the database just like this "Testing Testing1 Testing2 Testing123", but when it is shown in the gridview, it looks like this "Testing Testing1 Testing2 Testing123".
GridView eats the multiple spaces. This is only because of the browser that parses HTML. It never knows spaces, it only considers as space.
Workarounds
If you want to avoid the automatic elimination of multiple spaces string type data inside gridview, there are some workarounds that exist for it.
1. BoundField
In case if you are using the BoundField, then define it in this way.
<asp:BoundField DataField="description" DataFormatString="<pre>{0}</pre>"
HtmlEncode="False" />
There are two important properties of this field:
- Keep the
HtmlEncode=False
- Enclose the
DataFormatString inside the <pre></pre> tag
2. TemplateField
If you are using the TemplateField, then define your template field in this way.
<asp:TemplateField ConvertEmptyStringToNull="False">
<ItemTemplate>
<pre ><asp:Label ID="Label1" runat="server"
Text='<%# Bind("description") %>'></asp:Label></pre>
</ItemTemplate>
</asp:TemplateField>
There is one important property that needs to be set in this case:
- Enclose your template control inside the
<pre></pre> tag (in the above example, I have enclosed the Label control inside <pre></pre>.
Save the HTML Friendly Spaces
If you don't want to enclose BoundField or the TemplateColumn inside the <pre></pre> tags, then you have to manually change the space with HTML compatible space, i.e. at the time while saving it in the database.
A very simple way is to use the Replace function of string. Just like this:
string str = "Testing Testing1 Testing2 Testing123";
str.Replace(" ", " ");
History
- 6th November, 2008: Initial post