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?!]

Error Screenshot with Question Details

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
jsmithrAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

BuggyCoderCommented:
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

0
jsmithrAuthor Commented:
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
0
BuggyCoderCommented:
try to add a public property in your struct namely FileName or you can use AIP(automatically implemented properties) as i did in my code.
BTW, i tested my code by changing person from class to struct and it worked seamlessly....

Eval can only bind to public property/field in the list Type....
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
jsmithrAuthor Commented:
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
0
jsmithrAuthor Commented:
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

0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
ASP.NET

From novice to tech pro — start learning today.