We help IT Professionals succeed at work.

Bind formview to server side datatable

Mark Bakelaar
on
Dear exports,

I use a formview to display some details of a datagrid. The data is bind to labels
<asp:Label ID="Label2" runat="server"><%# Eval("ReportNumber")%></asp:Label> with a datasource defined client side.

The data is bind 1 on 1, but I need to make changes to some data before it's being bind / displayed. The filed usernames can for example contain multiple comma separated usernames of which the top 3 should be displayed under each other.

Is it possible to create a datatable server side (instead of client side) and bind this to the labels in the formview, this way I am able to create the datatable the way I need it?

Thanks in advance,
MB
Comment
Watch Question

CERTIFIED EXPERT
Most Valuable Expert 2012
Top Expert 2014

Commented:
You can change your SQL query to only get first three users.

Author

Commented:
Thanks CodeCruiser,

This is possible, but it's a bit more complicated. The string has the following structure username1#date1¤,username2#date2¤,username3#date3¤, etc. I have the following function which I use to split a comma separated string. Then I would need to adjust this to get out username (and preferably also date).

Regards,
MB

begin      
    declare @idx int      
    declare @slice varchar(8000)    

    select @idx = 1      
        if len(@String)<1 or @String is null  return      

    while @idx!= 0      
    begin      
        set @idx = charindex(@Delimiter,@String)      
        if @idx!=0      
            set @slice = left(@String,@idx - 1)      
        else      
            set @slice = @String      

        if(len(@slice)>0)  
            insert into @temptable(Items) values(@slice)      

        set @String = right(@String,len(@String) - @idx)      
        if len(@String) = 0 break      
    end  
return
Obadiah ChristopherDeveloper User Interface
CERTIFIED EXPERT

Commented:
I'm not sure if I understood your question properly, but this is how you can create a DataTable server side.

Server Side DataTable
CERTIFIED EXPERT
Most Valuable Expert 2012
Top Expert 2014

Commented:
Another option is to not use a SQLDataSource and use a datatable. Then you can loop through the datatable, do any processing you want, and then bind it to formview.

Author

Commented:
Thanks again for the replies,

Creating the datatable would be my preferred solution. I however have difficulties binding the datatable to the formview.

In the ascx I use (simplified, but I can confirm this is working with a client side datasource)
<table>
<tr>
        <td>
            <asp:formview id="ReportsView" runat="server" datakeynames="ReportID">
                <ItemTemplate>
                   <span class='title'>Voyage</span>
                    <asp:Label CssClass="info" ID="Label1" runat="server"><%# Eval("Voyage")%></asp:Label>
                  </ItemTemplate>
            </asp:formview>
        </td>
    </tr>
</table>

In the code behind I have

Public Class AlarmReportsDetails
    Inherits System.Web.UI.UserControl

    Public Property ReportID() As String
        Get
            If ViewState("ReportID") Is Nothing Then
                Return ""
            End If
            Return DirectCast(ViewState("ReportID"), String)
        End Get
        Set(ByVal value As String)

            ViewState("ReportID") = value
        End Set
    End Property

    Protected Overrides Sub OnPreRender(ByVal e As EventArgs)
        MyBase.OnPreRender(e)
        Me.AlarmReportsDataSource.SelectParameters("ReportID").DefaultValue = Me.ReportID

        Me.DataBind()
    End Sub

End Class

I created a datatable (which was correctly filled) and try to bind it to the formview using me.formview.datasource=datatable. This however did not work.

Do you perhaps have an example where a datatable is bind to a formview and where I can see how the label or textbox values are bind client side (eval)?

Thanks in advance,
MB
CERTIFIED EXPERT
Most Valuable Expert 2012
Top Expert 2014
Commented:
As long as all the column names are same, all you need to do is fill the datatable and assign it as datasource to the formview. Do add the FormView1.DataBind() as well after assigning the source and do this in page load within a

If Not Page.IsPostBack

block.

Author

Commented:
Thanks for the help,

If placed in the load event and not in a Page.IsPostBack it works.

Explore More ContentExplore courses, solutions, and other research materials related to this topic.