Solved

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

Posted on 2012-04-09
5
1,032 Views
Last Modified: 2012-04-10
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
0
Comment
Question by:jsmithr
  • 3
  • 2
5 Comments
 
LVL 20

Expert Comment

by:BuggyCoder
ID: 37824973
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
 

Author Comment

by:jsmithr
ID: 37825152
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
 
LVL 20

Accepted Solution

by:
BuggyCoder earned 500 total points
ID: 37825169
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
 

Author Comment

by:jsmithr
ID: 37825234
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
 

Author Comment

by:jsmithr
ID: 37827072
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

Featured Post

IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

ASP.Net to Oracle Connectivity Recently I had to develop an ASP.NET application connecting to an Oracle database.As I am doing it first time ,I had to solve several problems. This article will help to such developers  to develop an ASP.NET client…
User art_snob (http://www.experts-exchange.com/M_6114203.html) encountered strange behavior of Android Web browser on his Mobile Web site. It took a while to find the true cause. It happens so, that the Android Web browser (at least up to OS ver. 2.…
Excel styles will make formatting consistent and let you apply and change formatting faster. In this tutorial, you'll learn how to use Excel's built-in styles, how to modify styles, and how to create your own. You'll also learn how to use your custo…
Access reports are powerful and flexible. Learn how to create a query and then a grouped report using the wizard. Modify the report design after the wizard is done to make it look better. There will be another video to explain how to put the final p…

744 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