我有一个网格视图,我通过代码添加列:
//Retrieve "Table" from database
gridOffers.DataSource = table;
gridOffers.DataBind();
按钮添加了按代码添加的列,这不是我需要的: 如何确定添加到购物车按钮的最后一件事?
gridView来源:
<Columns>
<asp:ImageField DataImageUrlField="ImageUrl" ControlStyle-Width="100"
ControlStyle-Height = "100" HeaderText = "Preview Image"
ItemStyle-HorizontalAlign="Center">
<ControlStyle Height="100px" Width="100px"></ControlStyle>
<ItemStyle HorizontalAlign="Center"></ItemStyle>
</asp:ImageField>
<asp:TemplateField ShowHeader="False">
<ItemTemplate>
<asp:Button ID="Button1" runat="server" CausesValidation="false"
CommandName="btnAddToCart" Text="Add To Cart" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
答案 0 :(得分:5)
您正在通过将数据源数据绑定到GridView来定义GridView源中的列。因此,您有两个列来源;可能有也可能没有保证的顺序,其中列被添加到GridView。
相反,为什么不将GridView的 AutoGenerateColumns 设置为 False ,然后为所需的每个字段使用 BoundField 显式指定列顺序来自GridView源中的数据源,后跟图像和按钮列?
答案 1 :(得分:3)
我不知道是否有更少的hacky方式,但您可以使用RowDataBound
更改顺序,以便AutoGenerated列后跟其他列:
protected void gridOffers_RowDataBound(object sender, GridViewRowEventArgs e)
{
TableCell cell = e.Row.Cells[0];
e.Row.Cells.RemoveAt(0);
//Move first to the end
e.Row.Cells.Add(cell);
cell = e.Row.Cells[0];
e.Row.Cells.RemoveAt(0);
//Move second to the end
e.Row.Cells.Add(cell);
}
答案 2 :(得分:1)
您是否在Gridview上将AutoGenerateColumns
设置为true?如果是这样,将其设置为false并使用asp:BoundField
手动设置网格中的字段,将DataField
设置为数据源中字段的名称。
这样您就可以设置列的确切顺序。