<asp:gridview> </asp:gridview> </columns> </fields>中<fields>和<columns>之间的区别

时间:2012-10-17 09:46:29

标签: c# asp.net gridview

好吧,碰巧我是asp.net的新手并试图创建一个以编程方式声明源的Grid。

在此过程中,我遇到了2个标签字段。谁能告诉我他们有什么不同?

编辑:我浏览了一些示例 MSDN 示例,而且我可以告诉我,在我看来它们可以互换使用(尽管我有一种感觉不是真!)。

检查出来:

    <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>

然后有:

    <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>

看起来很相似或只是我吗??!

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

Columns只是

字段的周围标记
  • TemplateFields包含您想要的任何控件或
  • 自动创建的
  • BoundFields

所以Columns包含了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>

如您所见,TemplateField还可以包含另一个嵌套的GridView。

答案 1 :(得分:1)

我是瞎眼还是瞎眼!

在我发布这个问题后,我回到了我的绘图板,结果发现,asp:GridView中没有Fields标签,对吧?!

如果这是真人,请告诉我(并证明我很傻!)

答案 2 :(得分:1)

暂时忽略这个特定的控件,从一般的计算机科学角度来看这可能会有所帮助。

在经典编程(ANY LANGUAGE)中,FIELD将是行和列的交叉 - 一段独立的数据。例如,如果一个表有20行包含名字和姓氏的数据,那么如果你去了第19行并查看了&#34;名字&#34;专栏,你有一个FIELD。也许它包含离散数据&#34; JOHN&#34;。

然后

COLUMNS将是相似数据的集合 - 在这个例子中,你有两列&#34;名字&#34;和&#34;姓氏&#34;。列将具有诸如数据类型,最大长度,约束(可以为空等等)等属性。

有些人可能会对我的定义嗤之以鼻,并说COLUMN中的单个单元格将被称为FIELD。听到这种情况并不罕见。我会回答说,对于一个单列的表,它尤其如此:-)但是要点是:COLUMNS通常是容器,用于更小,更离散的项目,如FIELDS。 FIELDS通常引用单个数据,例如您在数据库表的行和列的交叉点找到。