日期:2014-05-17  浏览次数:20492 次

gridview 通过objectdatasource绑定到datatable,datatable中有一个合计行,如何让该行不参与排序
gridview 通过objectdatasource绑定到datatable,datatable中有一个合计行,如何让该行不参与排序

------解决方案--------------------
页脚数据不要放在DataTable中,应该单独将合计行的数据插入页脚。

你可以自己从GridView继承,并开发成自己的GridView控件。
------解决方案--------------------
引用:
gridview 通过objectdatasource绑定到datatable,datatable中有一个合计行,如何让该行不参与排序


让它排序也可以呀,就想办法让它排在最后就可以啦,不知道你是什么写的sql语句?

这样做排序
order by case when col1 is null when 1 else 0 end,col1 
col1为排序列
------解决方案--------------------
将GridView的ShowFooter属性设置为true,将OnDataBound属性设置为事件处理的函数名,例如:
    <asp:GridView ID="gvProd" runat="server" DataSourceID="sdsProd" AllowPaging="true" PageSize="20"
            OnDataBound="CountTotalPrice" AutoGenerateColumns="false" ShowFooter="true">
        <HeaderStyle BackColor="Black" ForeColor="White" Font-Bold="true" />
        <FooterStyle BackColor="Black" ForeColor="White" Font-Bold="true" />
        <Columns>
            <asp:BoundField DataField="ProductID" HeaderText="ID" />
            <asp:BoundField DataField="ProductName" HeaderText="ProductName" />
            <asp:BoundField DataField="UnitPrice" HeaderText="Price" />
            <asp:BoundField DataField="UnitsInStock" HeaderText="UnitsInStock" />
        </Columns>
    </asp:GridView>

当gvProd所有行数据绑定完毕后调用CountTotalPrice函数,CountTotalPrice函数代码如下
    protected void CountTotalPrice(object sender, EventArgs e)
    {
        decimal totalValue = 0;

        foreach (GridViewRow row in gvProd.Rows)
        {
            decimal price = Decimal.Parse(row.Cells[2].Text);
            int count = int.Parse(row.Cells[3].Text);
            totalValue += price * count;
        }

        GridViewRow footer = gvProd.FooterRow;
        footer.Cells[0].ColumnSpan = 3;