ASP.NET C# BoundField format (Remove leading zeros) - c#

How should DataFormatString of BoundField in Gridview look like that values won't have leading zeros?
So far I got this:
<asp:BoundField DataField="NUMBER" HeaderText="Id. number" DataFormatString="{0:d}">
Expected result:
000001 -> 1
002101 ->2101
I tried to figure that problem out with official documentation and this page. So far unsuccessful.

When you want to format something properly in a boundfield, I always suggest converting it to a templatefield. It's much easier to work with than boundfields. Here is an example of how the templatefield will look like once it's converted.
<asp:TemplateField ShowHeader="False" Visible="False">
<EditItemTemplate>
<asp:TextBox ID="tbEditNumber" runat="server" Text='<%# Bind("Number","{0:n}") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:TextBox ID="tbNumber" runat="server" Text='<%# Bind("Number","{0:n}") %>'></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
within that template field I placed..
Text='<%# Bind("yourfield","{0:n}") %>'
This should format it into a number and should drop the leading zeros.
EDIT: You might be able to try
Text='<%# String.Format("{0:n}", Eval("Number") ) %>'

Another approach is to use String.Trim function. The following code is how I accomplished what you are trying to do:
<asp:TemplateField>
<ItemTemplate>
<asp:Label runat="server" Text="<%#Eval("NUMBER").ToString().TrimStart('0')%>" ></asp:Label>
</ItemTemplate>
</asp:TemplateField>
The tricky part was using the correct combination of quotes and single quotes. You can use
"
in place of the quote character around your datafield column that you are displaying.

Simplifiying A Kimmels answer, no need to place in a server label, no concern of single or double quotes, no concern of underlying datatype, as it casts the object to string, then performs a string.TrimStart, no need for codebehind
<asp:TemplateField HeaderText="Work Order">
<ItemTemplate>
<%# Eval("WorkOrder").ToString().TrimStart("0".ToCharArray()) %>
</ItemTemplate>
</asp:TemplateField>
0123456 = 123456
0012345 = 12345
if a server label is required, just start and end the text tag with single quotes
<asp:Label ID="lblWorkOrder" runat="server" Text='<%# Eval("WorkOrder").ToString().TrimStart("0".ToCharArray()) %>' />

Try this. Much cleaner this way.
Markup
<asp:TemplateField HeaderText="Id. number">
<EditItemTemplate>
<asp:TextBox ID="tbEditNumber" runat="server" Text='<%# ConvertToDigit(Eval("Number")) %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:TextBox ID="tbNumber" runat="server" Text='<%# ConvertToDigit(Eval("Number")) %>'></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
Code-behind
protected int ConvertToDigit(object oNum)
{
var i = 0;
if (oNum != null) int.TryParse(oNum.ToString(), out i);
return i;
}

Related

ASP.NET Grid view Data filed Column Formatting Not working

I have a problem with the GridView column formatting.
I have a PhoneNumber that is currently coming from database as (###)###-#####
but I want the format to be ############ without spacing and brackets. I have tried every thing like DataFormatString="{0:###-####}" or than converting it into TemplateField and giving it format but not working.
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" >
<Columns>
<asp:TemplateField HeaderText="Phone Number">
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%#
Bind("PhoneNumber") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server"
Text='<%# Bind("PhoneNumber", "{0:d}") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
This is before converting the column to TemplateField:
<asp:BoundField DataField="PhoneNumber" HeaderText="Phone Number Home"
SortExpression="Phone" DataFormatString="{0:######-####}" HtmlEncode="false" />
But nothing is working. I still get the format of phone number like this (123) 123-4567.
If you are dynamically binding the rows in code behind, you should be formatting the columns in the DataBind event of the gridview.
The semantical column formatting works only when you use bind data semantically, for example declare
Try to replace Text property in TemplateField:
Text='<%# Bind("PhoneNumber", "{0:d}") %>'
with:
Text='<%# String.Format("{0:##########}",
Convert.ToInt64(DataBinder.Eval(Container.DataItem, "PhoneNumber")))%>'
Use "#" Custom Specifier.
Formatting is solely additive, not subtractive. To accomplish this, you would need to expose a version of the values which has non-numerics stripped out, so that your client-side formatting can act upon it.

Asp.net Converting into "MMM/yyyy" issue

Converting the template field value.
The default is shown like 01-03-2015 00:00:00
I need in MMM/yyyy format
<asp:TemplateField HeaderText="MonthYear" SortExpression="MonthYear">
<ItemTemplate>
<asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("MonthYear")%>'></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
Go with this:
<asp:TextBox ID="TextBox2" runat="server" Text='<%# Convert.ToDateTime(Eval("MonthYear")).ToString("MMM yyyy")%>'></asp:TextBox>

aspx bind data with '#' symbol to gridview

Been trying to fix this for hours and I know that the problem is with the '#' but I could not find any solution to this problem. My field name in the database is 'HRTRN#'.
<asp:TemplateField HeaderText="Transaction#">
<EditItemTemplate>
<asp:TextBox ID="TextBox13" runat="server" Text='<%# Bind("HRTRN#") %>' Width="50px" Height="17px" MaxLength="14"></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label5" runat="server" Text='<%# Bind("HRTRN#") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
Does anyone know the solution for this to make the field name containing # symbol accessible?
You should change your code from :
Bind("HRTRN#")
To
Bind("[HRTRN#]")
Since it contains special charcters. ( you would do that also for columns with spaces).

#Eval Short Date

I am trying to add date From and date To to my products these values are store in my database as date. These are stored in this format 2013-01-15. The format is not a problem but when I display them on my application the time appears (1/15/2013 12:00:00 AM) how can I remove the time please. Below you can find the method Im databound the data.
<asp:Label ID="Label4" runat="server" Text='<% # Eval("soDateTo") %>' Font-Bold="False" Font-Size="Small"></asp:Label>
Try String Formatting within the Eval statement:
See ASP Forums
There are several ways to format the date.
<asp:label id="DateAddedLabel" runat="server" text='<%#
Eval("DateAdded", "{0:d}") %>'></asp:label>
Try this;
<asp:Label ID="Label4" runat="server" Text='<% # Eval("soDateTo", "{0:dd/MM/yyyy}") %>' Font-Bold="False" Font-Size="Small"></asp:Label>
Very similar to Daniel's solution, but it handles null:
<asp:label id="DateAddedLabel" runat="server" text=
'<%# (String.IsNullOrEmpty(Eval("DateAdded").ToString()))
? "No Date Available" : Eval("DateAdded", "{0:d}") %>'>
</asp:label>
This has been answered just fine, but I used to use a lot more Labels than were necessary and thought I'd offer a way without.
You can ignore the Label all together and put the Eval(...) method by itself.
For example if you are using this inside of a TemplateField
<asp:TemplateField HeaderText="Date To">
<ItemTemplate>
<%# Eval("soDateTo", "{0:MM/dd/yyyy}") %>
</ItemTemplate>
</asp:TemplateField>
You can use this to improve your CSS control a tad, such as
<div id="client_since">
<%# Eval("soDateTo", "{0:MM/dd/yyyy}") %>
</div>
Use DateTime.ToShortDateString Method to get rid of the time part of the date:
http://msdn.microsoft.com/en-us/library/system.datetime.toshortdatestring.aspx
Try this:
> <asp:Label ID="Label4" runat="server" Text='<% # Eval("soDateTo", "{0:d}") %>'
> Font-Bold="False" Font-Size="Small"></asp:Label>
Try this;
<asp:Label ID="lbldate" runat="server" Text='<%# (Convert.ToDateTime(Eval("soDateTo"))).ToShortDateString() %>'></asp:Label>

Javascript Breaking on < & > in a GridView edit box

I've got an Asp.Net GridView inside an UpdatePanel. It all works fine, except when one of the columns includes HTML special characters like < and >. The GridView is bound to a List<Entity> and the Entity class has a property Regex which is a System.Text.RegularExpressions.Regex.
At first I had this:
<asp:TemplateField HeaderText="RegEx">
<ItemTemplate>
<asp:Label ID="RegExLabel" runat="server" Text='<%#Eval("Regex") %>'
ToolTip='<%#Eval("Regex") %>' Width="102px" CssClass="Wrap" />
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="RegExTextBox" runat="server" Text='<%#Eval("Regex") %>'
Width="98px" />
</EditItemTemplate>
</asp:TemplateField>
With a value of (?<capture>\d+) this displayed ?\d+ when not editing, and when editing this row I got a script error and the edit, update and cancel buttons no longer work.
Then I tried the answer in this question and had this:
<asp:TemplateField HeaderText="RegEx">
<ItemTemplate>
<asp:Label ID="RegExLabel" runat="server"
Text='<%#System.Web.HttpUtility.HtmlEncode(Eval("Regex").ToString()) %>'
ToolTip='<%#System.Web.HttpUtility.HtmlEncode(Eval("Regex").ToString()) %>'
Width="102px" CssClass="Wrap" />
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="RegExTextBox" runat="server"
Text='<%#System.Web.HttpUtility.HtmlEncode(Eval("Regex").ToString()) %>'
Width="98px" />
</EditItemTemplate>
</asp:TemplateField>
This is slightly better, in that the tooltip and the non-editing version display correctly, but when I start editing I see: (?<capture>\d+) with the HTML Entities displayed raw. Does anyone know a way to encode the values (to stop the script error) while still displaying them correctly without the HTML entities in their raw state when editing?
<asp:TemplateField HeaderText="RegEx">
<ItemTemplate>
<asp:Literal Mode="Encode" ID="RegExLabel" runat="server" Text='<%#Eval("Regex") %>'
ToolTip='<%#Eval("Regex") %>' Width="102px" CssClass="Wrap" />
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="RegExTextBox" runat="server" Text='<%#Eval("Regex") %>'
Width="98px" />
</EditItemTemplate>
</asp:TemplateField>
and in the page directive add this ValidateRequest="false"

Categories

Resources