Format Dynamically created datagrid's column to currency

Posted on 2007-11-13
Medium Priority
Last Modified: 2013-11-26
I have a Gridview that is populated by a dataset, which is obtained from a SQL Server 2005 database.  The datasource is gathered dynamically, in that it could have varying amounts of columns.  
My question is this:
How do I format the Gridview column so that it shows as currency.  I know the format.string("{0:c}", somenumber), but that will not work for my scenario.  As the datasource is created in the code behind, I have no inItemBound selection in the codebehind window, otherwise I could format it accordingly.  
I can provide data if needed, but I think this is a mechanics issue, as the data is successfully gathered into the dataset properly.
Question by:JaCrews

Expert Comment

ID: 20275403
after you bind the data...
Me.datagridname.Columns("whatever").DefaultCellStyle.Format = "C"

Author Comment

ID: 20275471
defaulyCellStyle is not a member of system.web.ui...DataControlField.

Author Comment

ID: 20275480
sorry, defauly=default
Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.


Author Comment

ID: 20275657
defaultCellStyle is not a member of system.web.ui...DataControlField
LVL 10

Expert Comment

by:Alpesh Patel
ID: 20275671
serveral method to do it

1. Create ItemTemplate for the perticular column
<%# Server.HtmlEncode( Eval("Price", "{0:c}").ToString() ) %>

2.  Bound item manually

<asp:BoundField HeaderText="Price"


Author Comment

ID: 20275709
I understand those methods, but, as I mentioned, my Datasource can have varying numbers of columns (3-9), and by creating a template, or boundfield, aren't I stating that the results / columns will be somewhat static (which is not the case)?

Accepted Solution

JumpsInLava earned 2000 total points
ID: 20276437
check this out:

the trick is, it determines formatting based on the column type.  here is some simplified code i got working from it (just plop a gridview and a button on the form, then paste this in the code behind).  you might be able to get something out of this to point you in the right direction:

    Protected Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        ' create datatable
        Dim theData As New DataTable
        theData.Columns.Add("Price", GetType(System.Decimal))

        ' put some data in it
        Dim aRow As DataRow = theData.NewRow
        aRow("Price") = 3.23
        aRow("Desc") = "something"

        aRow = theData.NewRow
        aRow("Price") = 32.83
        aRow("Desc") = "something else"

        ' load it
        Me.GridView1.DataSource = theData
        Me.GridView1.AutoGenerateColumns = False

        ' format the columns

        ' bind it

    End Sub

    Private Sub FormatColumns(ByRef tblData As DataTable)
        Dim colDataColumn As DataColumn
        For Each colDataColumn In tblData.Columns()
    End Sub

    Private Function CreateBoundColumns(ByRef colDataColumn As DataColumn) As BoundField
        Dim bndColumn As New BoundField()
        bndColumn.DataField = colDataColumn.ColumnName
        bndColumn.HtmlEncode = False
        bndColumn.HeaderText = colDataColumn.ColumnName.Replace("_", " ")
        bndColumn.DataFormatString = SetFormatString(colDataColumn)
        Return bndColumn
    End Function
    Private Function SetFormatString(ByRef colDataColumn As DataColumn) As String
        Dim strDataType As String
        Select Case colDataColumn.DataType.ToString()
            Case "System.Int32"
                strDataType = "{0:#,###}"
            Case "System.Decimal"
                strDataType = "{0:C}"
            Case "System.DateTime"
                strDataType = "{0:dd-mm-yyyy}"
            Case "System.String"
                strDataType = ""
            Case Else
                strDataType = ""
        End Select
        Return strDataType
    End Function


Expert Comment

ID: 20280587
Try this after binding:

' Get the index of the column you want to format from your datasource.
Dim ColumnIndex As Integer = MyTable.Columns.IndexOf("Price")

' Get the bound column from the GridView.
Dim Col As BoundField = TryCast(MyGridView.Columns[ColumnIndex], BoundField)
If Not (Col Is Nothing) Then
  Col.DataFormatString = "C"
  Col.HtmlEncode = False
End If

Firstly, you have to use the index to get the column. Secondly, you have to typecast the returned DataControlField to a BoundField. Also, sometimes setting the format string of a BoundField still doesn't work unless you stop it from HTML encoding the value.


Firstly, you have to use the index to get the column. Secondly, you have to typecast the returned DataControlField to a BoundField. Also, sometimes setting the format string of a BoundField still doesn't work unless you stop it from HTML encoding the value.


Author Comment

ID: 20281397
JumpsInLava Thank you so much.  Nothing like learning something new that I can apply elsewhere.  I cannot believe how this subscription just pays for itself time and time again.  thank you all for your suggestions.

Featured Post

The 14th Annual Expert Award Winners

The results are in! Meet the top members of our 2017 Expert Awards. Congratulations to all who qualified!

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

In real business world data are crucial and sometimes data are shared among different information systems. Hence, an agreeable file transfer protocol need to be established.
SingleRun is a tool that ensures that only one instance of an application is started, running it again brings the application to focus.
In this video I will demonstrate how to set up Nine, which I now consider the best alternative email app to Touchdown.
Hi, this video explains a free download that you can incorporate into your Access databases, or use stand-alone for contact management. Contacts -- Names, Addresses, Phone Numbers, eMail Addresses, Websites, Lists, Projects, Notes, Attachments…

624 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question