Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > ASP .Net > How to Bind List<> to GridView with Custom Objects

Reply
Thread Tools

How to Bind List<> to GridView with Custom Objects

 
 
Jonathan Wood
Guest
Posts: n/a
 
      01-20-2008
I see that I can create a List<string> list and bind it to a GridView
control (by setting the DataSource property to the list and calling the
DataBind method).

What's the trick to doing the same thing with my own classes instead of a
simple string? Is there an interface or something I can implement so that
the GridView control can detect the properties of my object and display them
?

Thanks.

--
Jonathan Wood
SoftCircuits Programming
http://www.softcircuits.com

 
Reply With Quote
 
 
 
 
Nick Bennett
Guest
Posts: n/a
 
      01-20-2008
You can just set the DataSource to be a List<MyObject> and DataBind. You
won't get any help with setting up the columns at design time if you do it
that way - you'll have type in all the details. If you want design time
help consider using an ObjectDataSource that points to a method that returns
the list.

Nick



"Jonathan Wood" <(E-Mail Removed)> wrote in message
news:%(E-Mail Removed)...
>I see that I can create a List<string> list and bind it to a GridView
>control (by setting the DataSource property to the list and calling the
>DataBind method).
>
> What's the trick to doing the same thing with my own classes instead of a
> simple string? Is there an interface or something I can implement so that
> the GridView control can detect the properties of my object and display
> them ?
>
> Thanks.
>
> --
> Jonathan Wood
> SoftCircuits Programming
> http://www.softcircuits.com
>



 
Reply With Quote
 
 
 
 
Jonathan Wood
Guest
Posts: n/a
 
      01-20-2008
Nick,

> You can just set the DataSource to be a List<MyObject> and DataBind. You
> won't get any help with setting up the columns at design time if you do it
> that way - you'll have type in all the details. If you want design time
> help consider using an ObjectDataSource that points to a method that
> returns the list.


Yeah, that's how it's done with a List<string> so I thought that might work.
But, with my class defined like this:

public class ClientMenuItem
{
public int MealNum;
public float Substitutions;
public string Group;
public float Units;
public string Measure;
public string Description;
public float Calories;
public float Protein;
public float Carbohydrate;
public float Fat;
}

I tried the following:

List<ClientMenuItem> items = ClientUsers.GetMenuItems(menus[0].MenuID);
GridView1.DataSource = items;
GridView1.DataBind();

And I get the following error at runtime on the last line above:

"The data source for GridView with id 'GridView1' did not have any
properties or attributes from which to generate columns. Ensure that your
data source has content."

--
Jonathan Wood
SoftCircuits Programming
http://www.softcircuits.com

 
Reply With Quote
 
Nick Bennett
Guest
Posts: n/a
 
      01-20-2008
The message is correct: your class doesn't have any properties - it has
public fields, which isn't a good thing. Try replacing your fields with
properties - e.g. convert

public int MealNum;

to

public int MealNum { get; set; }

if you're in VS2008, or this

private int _mealNum;

public int MealNum
{
get { return _mealNum; }
set { _mealNum = value; }
}

if in VS2005 or VS2003.





"Jonathan Wood" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed)...
> Nick,
>
>> You can just set the DataSource to be a List<MyObject> and DataBind. You
>> won't get any help with setting up the columns at design time if you do
>> it that way - you'll have type in all the details. If you want design
>> time help consider using an ObjectDataSource that points to a method that
>> returns the list.

>
> Yeah, that's how it's done with a List<string> so I thought that might
> work. But, with my class defined like this:
>
> public class ClientMenuItem
> {
> public int MealNum;
> public float Substitutions;
> public string Group;
> public float Units;
> public string Measure;
> public string Description;
> public float Calories;
> public float Protein;
> public float Carbohydrate;
> public float Fat;
> }
>
> I tried the following:
>
> List<ClientMenuItem> items = ClientUsers.GetMenuItems(menus[0].MenuID);
> GridView1.DataSource = items;
> GridView1.DataBind();
>
> And I get the following error at runtime on the last line above:
>
> "The data source for GridView with id 'GridView1' did not have any
> properties or attributes from which to generate columns. Ensure that your
> data source has content."
>
> --
> Jonathan Wood
> SoftCircuits Programming
> http://www.softcircuits.com
>



 
Reply With Quote
 
Jonathan Wood
Guest
Posts: n/a
 
      01-20-2008
That's the deal? I thought about that. Actually, I was putting all
properties in my classes until I decided it was WAAAAAAAAAAAAY too much
typing and just seemed unnecessary.

Yup, that's it! Nice. Cool feature.

Thanks.

--
Jonathan Wood
SoftCircuits Programming
http://www.softcircuits.com

"Nick Bennett" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed)...
> The message is correct: your class doesn't have any properties - it has
> public fields, which isn't a good thing. Try replacing your fields with
> properties - e.g. convert
>
> public int MealNum;
>
> to
>
> public int MealNum { get; set; }
>
> if you're in VS2008, or this
>
> private int _mealNum;
>
> public int MealNum
> {
> get { return _mealNum; }
> set { _mealNum = value; }
> }
>
> if in VS2005 or VS2003.
>
>
>
>
>
> "Jonathan Wood" <(E-Mail Removed)> wrote in message
> news:(E-Mail Removed)...
>> Nick,
>>
>>> You can just set the DataSource to be a List<MyObject> and DataBind. You
>>> won't get any help with setting up the columns at design time if you do
>>> it that way - you'll have type in all the details. If you want design
>>> time help consider using an ObjectDataSource that points to a method
>>> that returns the list.

>>
>> Yeah, that's how it's done with a List<string> so I thought that might
>> work. But, with my class defined like this:
>>
>> public class ClientMenuItem
>> {
>> public int MealNum;
>> public float Substitutions;
>> public string Group;
>> public float Units;
>> public string Measure;
>> public string Description;
>> public float Calories;
>> public float Protein;
>> public float Carbohydrate;
>> public float Fat;
>> }
>>
>> I tried the following:
>>
>> List<ClientMenuItem> items = ClientUsers.GetMenuItems(menus[0].MenuID);
>> GridView1.DataSource = items;
>> GridView1.DataBind();
>>
>> And I get the following error at runtime on the last line above:
>>
>> "The data source for GridView with id 'GridView1' did not have any
>> properties or attributes from which to generate columns. Ensure that
>> your data source has content."
>>
>> --
>> Jonathan Wood
>> SoftCircuits Programming
>> http://www.softcircuits.com
>>

>
>


 
Reply With Quote
 
Milosz Skalecki [MCAD]
Guest
Posts: n/a
 
      01-20-2008
Howdy,

You don't need to type property declaration yourself. VS >= 2005 supports
refactoring and includes very useful commands to make your life easier:
Three ways to quickly implement a property:
1. Press Ctrl+K,X or go to main menu Edit->Intelli Sense->Insert Snippet
select "prop" or Visual C#\prop from drop down list, and change property's
type and name.
2. in the code type
private [AnyType] fieldName;
(Ctrl+R,E) or right click -> Refactor ->Encapsulate Field.
3. Create class diagram, and design your classes through a GUI.

Hope this helps
--
Milosz


"Jonathan Wood" wrote:

> That's the deal? I thought about that. Actually, I was putting all
> properties in my classes until I decided it was WAAAAAAAAAAAAY too much
> typing and just seemed unnecessary.
>
> Yup, that's it! Nice. Cool feature.
>
> Thanks.
>
> --
> Jonathan Wood
> SoftCircuits Programming
> http://www.softcircuits.com
>
> "Nick Bennett" <(E-Mail Removed)> wrote in message
> news:(E-Mail Removed)...
> > The message is correct: your class doesn't have any properties - it has
> > public fields, which isn't a good thing. Try replacing your fields with
> > properties - e.g. convert
> >
> > public int MealNum;
> >
> > to
> >
> > public int MealNum { get; set; }
> >
> > if you're in VS2008, or this
> >
> > private int _mealNum;
> >
> > public int MealNum
> > {
> > get { return _mealNum; }
> > set { _mealNum = value; }
> > }
> >
> > if in VS2005 or VS2003.
> >
> >
> >
> >
> >
> > "Jonathan Wood" <(E-Mail Removed)> wrote in message
> > news:(E-Mail Removed)...
> >> Nick,
> >>
> >>> You can just set the DataSource to be a List<MyObject> and DataBind. You
> >>> won't get any help with setting up the columns at design time if you do
> >>> it that way - you'll have type in all the details. If you want design
> >>> time help consider using an ObjectDataSource that points to a method
> >>> that returns the list.
> >>
> >> Yeah, that's how it's done with a List<string> so I thought that might
> >> work. But, with my class defined like this:
> >>
> >> public class ClientMenuItem
> >> {
> >> public int MealNum;
> >> public float Substitutions;
> >> public string Group;
> >> public float Units;
> >> public string Measure;
> >> public string Description;
> >> public float Calories;
> >> public float Protein;
> >> public float Carbohydrate;
> >> public float Fat;
> >> }
> >>
> >> I tried the following:
> >>
> >> List<ClientMenuItem> items = ClientUsers.GetMenuItems(menus[0].MenuID);
> >> GridView1.DataSource = items;
> >> GridView1.DataBind();
> >>
> >> And I get the following error at runtime on the last line above:
> >>
> >> "The data source for GridView with id 'GridView1' did not have any
> >> properties or attributes from which to generate columns. Ensure that
> >> your data source has content."
> >>
> >> --
> >> Jonathan Wood
> >> SoftCircuits Programming
> >> http://www.softcircuits.com
> >>

> >
> >

>
>

 
Reply With Quote
 
Jonathan Wood
Guest
Posts: n/a
 
      02-09-2008
Sorry for the slow delay but the Encapsulate Field command looks like the
one I was trying to find.

Thanks!

--
Jonathan Wood
SoftCircuits Programming
http://www.softcircuits.com

"Milosz Skalecki [MCAD]" <(E-Mail Removed)> wrote in message
news:(E-Mail Removed)...
> Howdy,
>
> You don't need to type property declaration yourself. VS >= 2005 supports
> refactoring and includes very useful commands to make your life easier:
> Three ways to quickly implement a property:
> 1. Press Ctrl+K,X or go to main menu Edit->Intelli Sense->Insert Snippet
> select "prop" or Visual C#\prop from drop down list, and change property's
> type and name.
> 2. in the code type
> private [AnyType] fieldName;
> (Ctrl+R,E) or right click -> Refactor ->Encapsulate Field.
> 3. Create class diagram, and design your classes through a GUI.
>
> Hope this helps
> --
> Milosz
>
>
> "Jonathan Wood" wrote:
>
>> That's the deal? I thought about that. Actually, I was putting all
>> properties in my classes until I decided it was WAAAAAAAAAAAAY too much
>> typing and just seemed unnecessary.
>>
>> Yup, that's it! Nice. Cool feature.
>>
>> Thanks.
>>
>> --
>> Jonathan Wood
>> SoftCircuits Programming
>> http://www.softcircuits.com
>>
>> "Nick Bennett" <(E-Mail Removed)> wrote in message
>> news:(E-Mail Removed)...
>> > The message is correct: your class doesn't have any properties - it has
>> > public fields, which isn't a good thing. Try replacing your fields
>> > with
>> > properties - e.g. convert
>> >
>> > public int MealNum;
>> >
>> > to
>> >
>> > public int MealNum { get; set; }
>> >
>> > if you're in VS2008, or this
>> >
>> > private int _mealNum;
>> >
>> > public int MealNum
>> > {
>> > get { return _mealNum; }
>> > set { _mealNum = value; }
>> > }
>> >
>> > if in VS2005 or VS2003.
>> >
>> >
>> >
>> >
>> >
>> > "Jonathan Wood" <(E-Mail Removed)> wrote in message
>> > news:(E-Mail Removed)...
>> >> Nick,
>> >>
>> >>> You can just set the DataSource to be a List<MyObject> and DataBind.
>> >>> You
>> >>> won't get any help with setting up the columns at design time if you
>> >>> do
>> >>> it that way - you'll have type in all the details. If you want
>> >>> design
>> >>> time help consider using an ObjectDataSource that points to a method
>> >>> that returns the list.
>> >>
>> >> Yeah, that's how it's done with a List<string> so I thought that might
>> >> work. But, with my class defined like this:
>> >>
>> >> public class ClientMenuItem
>> >> {
>> >> public int MealNum;
>> >> public float Substitutions;
>> >> public string Group;
>> >> public float Units;
>> >> public string Measure;
>> >> public string Description;
>> >> public float Calories;
>> >> public float Protein;
>> >> public float Carbohydrate;
>> >> public float Fat;
>> >> }
>> >>
>> >> I tried the following:
>> >>
>> >> List<ClientMenuItem> items =
>> >> ClientUsers.GetMenuItems(menus[0].MenuID);
>> >> GridView1.DataSource = items;
>> >> GridView1.DataBind();
>> >>
>> >> And I get the following error at runtime on the last line above:
>> >>
>> >> "The data source for GridView with id 'GridView1' did not have any
>> >> properties or attributes from which to generate columns. Ensure that
>> >> your data source has content."
>> >>
>> >> --
>> >> Jonathan Wood
>> >> SoftCircuits Programming
>> >> http://www.softcircuits.com
>> >>
>> >
>> >

>>
>>


 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Re: How include a large array? Edward A. Falk C Programming 1 04-04-2013 08:07 PM
Bind profile custom properties (from web.config) to gridview or formview Giorgio ASP .Net 0 01-09-2006 07:49 PM
Bind GridView to generic custom object List collection Steven Baggs ASP .Net 5 10-18-2005 09:45 PM
Using a data-bind dropdownlist to populate another data-bind dropdownlist mr2_93 ASP .Net 1 10-02-2005 05:07 PM
Bind an Array of Custom Objects =?Utf-8?B?SmVk?= ASP .Net 6 11-22-2004 10:16 PM



Advertisments