user2401745
user2401745

Reputation: 367

asp.net bind a list to a gridview

List<MasterBook> listOfBooks = new List<MasterBook>();

after i put the masterbook objects which by the way have 3 fields( name,id and active ) into the list

 GridView1.DataSource = listOfBooks;
 GridView1.DataBind(); 

in the web form

   <Columns>

            <asp:TemplateField HeaderText="Book Name">
                <ItemTemplate>
                    <asp:Label ID="BookNameText" runat="server" 
                            Text="<%#Container.DataItem%>">

                    </asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>

    </asp:GridView>

the problem is that i want to display the bookmaster's name in the gridview column this code print bookmaster in the column how can i make it type the name

Upvotes: 5

Views: 8678

Answers (4)

Oscar
Oscar

Reputation: 13960

Use this sintax:

<asp:Label ID="BookNameText" runat="server" 
                        Text="<%# ((MasterBook)Container.DataItem).Name %>">

Upvotes: 0

hutchonoid
hutchonoid

Reputation: 33305

Change:

  <%#Container.DataItem%>

To:

  <%#Eval("name")%>

Upvotes: 4

Geeky Guy
Geeky Guy

Reputation: 9399

The quick, dirty hack workaround is to overload the ToString() method of your MasterBookclass in order to return that name. Commit seppuku afterwards if you do it.

The elegant and graceful way is to make an object datasource. That way you can bind the grid view's columns to the objects' properties. In the case of a DataList or other templated data controls, you can bind your objects' properties to the data control's child controls in their templates.

The middle path is in hutchonoid's answer: evaluate a property of the object, not the object itself.

Upvotes: 0

nmat
nmat

Reputation: 7591

Cast it to MasterBook:

Text="<%# ((MasterBook) Container.DataItem).Name %>">

Upvotes: 3

Related Questions