Sayan
Sayan

Reputation: 2054

Difference between <Fields> and <Columns> in <asp:GridView>

Well it so happens that I am kind of a novice to asp.net and trying to create a Grid whose source is declared programmatically.

In the process, I came across 2 tags Fields and Columns. Can anyone please tell me how they are different?

EDIT: I went through some sample MSDN examples, and for all I can tell it seems to me they can be used interchangeably(though I have a feeling thats not true!).

Check this out:

    <asp:GridView ID="GridView1" runat="server" 
AutoGenerateColumns="False" DataKeyNames="EmployeeID" DataSourceID="ObjectDataSource1">

    <Columns>

        <asp:BoundField DataField="LastName" HeaderText="LastName"

          SortExpression="LastName" />

        <asp:BoundField DataField="FirstName" HeaderText="FirstName"

          SortExpression="FirstName" />

        <asp:BoundField DataField="Title" HeaderText="Title"

          SortExpression="Title" />

        <asp:BoundField DataField="HireDate" HeaderText="HireDate"

          SortExpression="HireDate" />

    </Columns>

</asp:GridView>

And then there is:

    <asp:GridView ID="GridView1" runat="server" AllowPaging="True"
AutoGenerateRows="False" DataKeyNames="ProductID"
DataSourceID="ObjectDataSource1" EnableViewState="False">

    <Fields>

        <asp:BoundField DataField="ProductName" HeaderText="Product"

          SortExpression="ProductName" />

        <asp:BoundField DataField="CategoryName" 
HeaderText="Category"

          ReadOnly="True" SortExpression="CategoryName" />

        <asp:BoundField DataField="SupplierName" 
HeaderText="Supplier"

          ReadOnly="True" SortExpression="SupplierName" />

        <asp:BoundField DataField="QuantityPerUnit" 

          HeaderText="Qty/Unit" SortExpression="QuantityPerUnit" />

        <asp:BoundField DataField="UnitPrice" 
DataFormatString="{0:c}"

          HeaderText="Price"

            HtmlEncode="False" SortExpression="UnitPrice" />

    </Fields>

</asp:GridView>

Seem similar or is it just me??!

Thanks for helping.

Upvotes: 0

Views: 760

Answers (3)

markaaronky
markaaronky

Reputation: 1305

Putting aside this particular control for a moment, it might be helpful to look at this from a general computer science point of view.

In classic programming (ANY LANGUAGE), a FIELD would be the INTERSECTION of a row and a column -- a discrete piece of data. For example, if a table has 20 rows of data containing first and last names, if you went to the 19th row and looked in the "first name" column, you've got a FIELD. Perhaps it contains the discrete data "JOHN".

COLUMNS then would be collections of like data -- in this example, you have the two columns "first name" and "last name". Columns would have attributes such as a data type, maximum length, constraints (are nulls OK?, etc.) and so forth.

Some may quibble with my definitions and say that individual cells in a COLUMN would be called a FIELD. It's not uncommon to hear that. I would reply that for a table with a single column, it'd be especially true :-) But the takeaway point is this: COLUMNS are generally containers for smaller, more discrete items such as FIELDS. FIELDS typically refer to a single piece of data, such as you'd find at the intersection of a row and column in a database table.

Upvotes: 1

Sayan
Sayan

Reputation: 2054

Am I blind or wat!

After I posted this question I went back to my drawingboard and as it turns out, there is no Fields tag in asp:GridView, right?!

Please do let me know if this is true people(and prove me silly!)

Upvotes: 1

Tim Schmelter
Tim Schmelter

Reputation: 460208

Columns is just the surrounding tag for the fields which are

  • TemplateFields with any controls you want or
  • BoundFields which are created automatically

So Columns enclose the list of fields in the GridView.

<Columns>
    <asp:Boundfield datafield="StudentID"
        readonly="true"      
        headertext="Student ID"/>
    <asp:TemplateField HeaderText="Student" HeaderStyle-HorizontalAlign="Left">
       <ItemTemplate>
            <asp:label runat="server" Font-Bold="true" ID="LblStudent" Text='<%# Bind("Student") %>'></asp:label>
        </ItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField HeaderText="Inner Grid">
       <ItemTemplate>
           <asp:GridView ID="Grid2" AutoGenerateColumns="false" runat="server" GridLines="None" Width="300">
                <RowStyle  CssClass="GridViewRowStyle" />
                <AlternatingRowStyle CssClass="GridViewAlternatingRowStyle" />
                <HeaderStyle CssClass="GridViewHeaderStyle" />
                <SelectedRowStyle BackColor="Aqua" />
                <Columns>
                    <asp:TemplateField HeaderText="Student" HeaderStyle-HorizontalAlign="Left">
                       <ItemTemplate>
                            <asp:label runat="server" Font-Bold="true" ID="LblStudent" Text='<%# Bind("Student") %>'></asp:label>
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>
            </asp:GridView>
        </ItemTemplate>
    </asp:TemplateField>
</Columns>

As you can see, a TemplateField could also contain another nested GridView.

Upvotes: 2

Related Questions