How to Bind List<> to GridView with Custom Objects

How to Bind List<> to GridView with Custom Objects

am 20.01.2008 04:18:47 von Jonathan Wood

I see that I can create a List 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

Re: How to Bind List<> to GridView with Custom Objects

am 20.01.2008 04:27:33 von Nick Bennett

You can just set the DataSource to be a List 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" wrote in message
news:%238zetMxWIHA.1532@TK2MSFTNGP04.phx.gbl...
>I see that I can create a List 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
>

Re: How to Bind List<> to GridView with Custom Objects

am 20.01.2008 04:31:58 von Jonathan Wood

Nick,

> You can just set the DataSource to be a List 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 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 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

Re: How to Bind List<> to GridView with Custom Objects

am 20.01.2008 05:00:47 von Nick Bennett

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" wrote in message
news:uceRFUxWIHA.5816@TK2MSFTNGP06.phx.gbl...
> Nick,
>
>> You can just set the DataSource to be a List 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 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 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
>

Re: How to Bind List<> to GridView with Custom Objects

am 20.01.2008 05:18:17 von Jonathan Wood

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" wrote in message
news:OMRFWjxWIHA.5396@TK2MSFTNGP02.phx.gbl...
> 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" wrote in message
> news:uceRFUxWIHA.5816@TK2MSFTNGP06.phx.gbl...
>> Nick,
>>
>>> You can just set the DataSource to be a List 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 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 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
>>
>
>

Re: How to Bind List<> to GridView with Custom Objects

am 20.01.2008 21:10:01 von mily242

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" wrote in message
> news:OMRFWjxWIHA.5396@TK2MSFTNGP02.phx.gbl...
> > 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" wrote in message
> > news:uceRFUxWIHA.5816@TK2MSFTNGP06.phx.gbl...
> >> Nick,
> >>
> >>> You can just set the DataSource to be a List 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 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 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
> >>
> >
> >
>
>