PC Review


Reply
Thread Tools Rate Thread

How to Bind List<> to GridView with Custom Objects

 
 
Jonathan Wood
Guest
Posts: n/a
 
      20th Jan 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
 
      20th Jan 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
 
      20th Jan 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
 
      20th Jan 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
 
      20th Jan 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
 
      20th Jan 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
 
      9th Feb 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:EB31650A-EEBC-4A5D-B56B-(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
Rate This Thread
Rate This Thread:

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
how can I bind my custom entity objects to data controls Mehdi Microsoft Dot NET Framework 4 7th Aug 2006 02:58 PM
how can I bind my custom entity objects to data controls Mehdi Microsoft Dot NET 0 5th Aug 2006 11:13 AM
Bind profile custom properties (from web.config) to gridview or formview Giorgio Microsoft ASP .NET 0 9th Jan 2006 07:49 PM
Bind GridView to generic custom object List collection Steven Baggs Microsoft ASP .NET 5 18th Oct 2005 10:45 PM
Bind an Array of Custom Objects =?Utf-8?B?SmVk?= Microsoft ASP .NET 7 13th Dec 2004 03:11 PM


Features
 

Advertising
 

Newsgroups
 


All times are GMT +1. The time now is 06:49 AM.