Link to home
Start Free TrialLog in
Avatar of jsmithr
jsmithrFlag for United States of America

asked on

C# DataBinding - List<structure> does not contain a property with the name 'FileName'

I am migrating VB.Net Code into a C# Project and have run into the following error:
[But you can see that there is in fact a property in my List of Type Structure called FileName?!]

User generated image

Here is the code behind that Binds my List to the Repeater Control [in case it is relevant]:
        private void PopulateConventionalCoolerWalkPanel()
        {

            List<FSPIPartnerGlobal.stcFileInfo> li = new List<FSPIPartnerGlobal.stcFileInfo>();             
            li = objDirectorySearcher.GetFilesInDirectory("C:\\PartnerAccessFiles\\ConventionalCoolerWalk", "*.jpg");
 
            if (li.Count != 0)
            {
                pnlConventionalCoolerWalk.Visible = true;
                rptConventionalCoolerWalk.DataSource = li.GetRange(0, 5);
                rptConventionalCoolerWalk.DataBind();
                litConventionalCoolerWalkUpdated.Text = Convert.ToString(li[0].DateCreated);
            }
            li.Clear();
        }

Open in new window




I am thinking that there must be a syntax error in my Eval code, but it looks ok to me?
Jason
Avatar of BuggyCoder
BuggyCoder
Flag of India image

you seem to be clearing the list after binding the data.
Secondaly, simpley using <%#Eval("FileName")%> will also bind the file name to your repeater's item template....

Here is my solution that worked perfectly for me:-

Markup:-
<asp:Repeater runat="server" ID="rptTest">
         <ItemTemplate>
             <span><%#Eval("Name")%></span>
             <span><%#Eval("Id") %></span>
         </ItemTemplate>
         
     </asp:Repeater>

Open in new window

Code Behind:-
using System;
using System.Collections.Generic;

public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {
        var persons = new List<Person>
                          {
                              new Person() {Id = "1", Name = "Jatin"},
                              new Person() {Id = "2", Name = "John"}
                          };
        rptTest.DataSource = persons;
        rptTest.DataBind();
        persons.Clear();
    }
    protected void btnTest_Click(object sender, EventArgs e)
    {
        
    }

    public class Person
    {
        public string Id { get; set; }
        public string Name { get; set; }
    }
}

Open in new window

Avatar of jsmithr

ASKER

I dont know what to say. I am not defining properties in a C# Class. I am returning a Structure as a List and Binding my repeater to that list... albeit without success.

Thee must be something funny with the way C# DataBinds Lists that I do not understand.

Jason
ASKER CERTIFIED SOLUTION
Avatar of BuggyCoder
BuggyCoder
Flag of India image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of jsmithr

ASKER

Yep, thats it. its a limitation of vb.net in .net 2.0. I will have to define properties in the structure like this:

    Public Structure stcFileInfo
        Public strFullName As String

        Public DirectoryName As String
        Public FileName As String
        Public Extension As String
        Public DateCreated As DateTime
        Public DateModified As DateTime
        Public AllProperties As FileInfo

        Public Property FullName() As String
            Get
                Return strFullName
            End Get
            Set(ByVal value As String)
                strFullName = value
            End Set
        End Property

    End Structure

Open in new window


Then, return that structure to the C# side, Dimension my List, then DataBind to the List.

The Eval("FullName") then works. I will post the completed code tomorrow.
Jason
Avatar of jsmithr

ASKER

Here is the modification to the vb.net structure that allowed me to use the C# DataBind via Eval("PropertyName").

Public Class clsDirectorySearcher
    Public Structure stcFileInfo
        Public strFullName As String
        Public strDirectoryName As String
        Public strFileName As String
        Public strExtension As String
        Public dtDateCreated As DateTime
        Public dtDateModified As DateTime
        Public fiAllProperties As FileInfo

        Public Property FullName() As String
            Get
                Return strFullName
            End Get
            Set(ByVal value As String)
                strFullName = value
            End Set
        End Property

        Public Property DirectoryName() As String
            Get
                Return strDirectoryName
            End Get
            Set(ByVal value As String)
                strDirectoryName = value
            End Set
        End Property

        Public Property FileName() As String
            Get
                Return strFileName
            End Get
            Set(ByVal value As String)
                strFileName = value
            End Set
        End Property

        Public Property Extension() As String
            Get
                Return strExtension
            End Get
            Set(ByVal value As String)
                strExtension = value
            End Set
        End Property

        Public Property DateCreated() As DateTime
            Get
                Return dtDateCreated
            End Get
            Set(ByVal value As DateTime)
                dtDateCreated = value
            End Set
        End Property

        Public Property DateModified() As DateTime
            Get
                Return dtDateModified
            End Get
            Set(ByVal value As DateTime)
                dtDateModified = value
            End Set
        End Property

        Public Property AllProperties() As FileInfo
            Get
                Return fiAllProperties
            End Get
            Set(ByVal value As FileInfo)
                fiAllProperties = value
            End Set
        End Property

    End Structure

Open in new window