Solved

Format Dynamically created datagrid's column to currency

Posted on 2007-11-13
9
2,384 Views
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.
0
Comment
Question by:JaCrews
9 Comments
 
LVL 2

Expert Comment

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

Author Comment

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

Author Comment

by:JaCrews
ID: 20275480
sorry, defauly=default
0
 

Author Comment

by:JaCrews
ID: 20275657
defaultCellStyle is not a member of system.web.ui...DataControlField
0
DevOps Toolchain Recommendations

Read this Gartner Research Note and discover how your IT organization can automate and optimize DevOps processes using a toolchain architecture.

 
LVL 10

Expert Comment

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

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

2.  Bound item manually

<asp:BoundField HeaderText="Price"
                  DataField="Price"
                     DataFormatString="{0:c}">
                                    </asp:BoundField>


0
 

Author Comment

by:JaCrews
ID: 20275709
ConceptInfoTech:
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)?
0
 
LVL 2

Accepted Solution

by:
JumpsInLava earned 500 total points
ID: 20276437
check this out:
http://blogs.msdn.com/rahulso/archive/2006/02/28/Dynamic-GridView-Series-_2D00_-2.Formatting-Columns-dynamically.aspx

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))
        theData.Columns.Add("Desc")

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

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


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

        ' format the columns
        FormatColumns(theData)

        ' bind it
        Me.GridView1.DataBind()

    End Sub

    Private Sub FormatColumns(ByRef tblData As DataTable)
        Dim colDataColumn As DataColumn
        For Each colDataColumn In tblData.Columns()
            Me.GridView1.Columns.Add(CreateBoundColumns(colDataColumn))
        Next
    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

   
0
 
LVL 6

Expert Comment

by:ventaur
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.

Regards,
-Matt


----------
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.

Regards,
-Matt
0
 

Author Comment

by:JaCrews
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.
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

A long time ago (May 2011), I have written an article showing you how to create a DLL using Visual Studio 2005 to be hosted in SQL Server 2005. That was valid at that time and it is still valid if you are still using these versions. You can still re…
Calculating holidays and working days is a function that is often needed yet it is not one found within the Framework. This article presents one approach to building a working-day calculator for use in .NET.
This is a video describing the growing solar energy use in Utah. This is a topic that greatly interests me and so I decided to produce a video about it.
With Secure Portal Encryption, the recipient is sent a link to their email address directing them to the email laundry delivery page. From there, the recipient will be required to enter a user name and password to enter the page. Once the recipient …

930 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

Need Help in Real-Time?

Connect with top rated Experts

12 Experts available now in Live!

Get 1:1 Help Now