将按钮放在gridview中的最后一列

时间:2012-03-30 12:11:28

标签: c# asp.net visual-studio gridview

我有一个网格视图,我通过代码添加列:

//Retrieve "Table" from database
gridOffers.DataSource = table;
gridOffers.DataBind();

按钮添加了按代码添加的列,这不是我需要的: enter image description here 如何确定添加到购物车按钮的最后一件事?

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>

3 个答案:

答案 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设置为数据源中字段的名称。

这样您就可以设置列的确切顺序。