2011-03-20 132 views
0

我有一个简单的DevexpressGridview在Devexpress Gridview中计算小计

enter image description here

这里代码;

<dx:ASPxGridView ID="grid" runat="server" DataSourceID="MasterDataSource" Width="100%" 
     AutoGenerateColumns="False" KeyFieldName="CategoryID"> 
     <Columns> 
      <dx:GridViewDataTextColumn FieldName="CategoryID" ReadOnly="True" VisibleIndex="0" /> 
      <dx:GridViewDataTextColumn FieldName="CategoryName" VisibleIndex="1" /> 
      <dx:GridViewDataTextColumn FieldName="Description" VisibleIndex="2" /> 
     </Columns> 
     <SettingsDetail ShowDetailRow="True" ExportMode="Expanded" /> 
     <Templates> 
      <DetailRow> 
       <dx:ASPxGridView ID="detailGrid" runat="server" AutoGenerateColumns="False" DataSourceID="DetailDataSource" 
        KeyFieldName="ProductID" Width="100%" OnBeforePerformDataSelect="detailGrid_BeforePerformDataSelect"> 
        <SettingsDetail IsDetailGrid="true" ExportIndex="0" /> 
        <Columns> 
         <dx:GridViewDataTextColumn FieldName="ProductID" ReadOnly="True" VisibleIndex="0" /> 
         <dx:GridViewDataTextColumn FieldName="ProductName" VisibleIndex="1" /> 
         <dx:GridViewDataTextColumn FieldName="UnitPrice" VisibleIndex="2" /> 
         <dx:GridViewDataTextColumn FieldName="QuantityPerUnit" VisibleIndex="3" /> 
        </Columns> 
       </dx:ASPxGridView> 

有什么办法计算的DevExpress子总Unit Price列?

对于这个例子;我只想在底部总计Unit Price列(18 + 19 + 4.5 + 14 + 18 + 263.5 + 18 + 46 + 14 + 14 + 15 = 430)..

我该怎么做?

最好的问候,

Soner

回答

1

这可以通过使用ASPxGridView使用以下方法来实现。 2)使用详细的GridView的DataBound和BeforeGetCallBackResult事件处理程序来设置标签的文本。这里是我的代码:

protected int CalcPageSummary(ASPxGridView gridView, string fieldName) { 
    GridViewDataColumn column = gridView.Columns[fieldName] as GridViewDataColumn; 
    if(column == null) 
     return 0; 
    int pageIndex = gridView.PageIndex; 
    int startRowIndex = pageIndex * gridView.SettingsPager.PageSize; 
    int finishRowIndex = startRowIndex + gridView.SettingsPager.PageSize; 
    if(finishRowIndex > gridView.VisibleRowCount) 
     finishRowIndex = gridView.VisibleRowCount; 
    int result = 0; 
    for(int i = startRowIndex; i < finishRowIndex; i++) 
     result += Convert.ToInt32(gridView.GetRowValues(i, fieldName)); 
    return result; 
} 

private void SetColumnSummary(ASPxGridView gridView, string fieldName) { 
    ASPxLabel lbl = gridView.FindFooterCellTemplateControl(gridView.Columns[fieldName], "ASPxLabel1") as ASPxLabel; 
    if(lbl != null) 
     lbl.Text = CalcPageSummary(gridView, fieldName).ToString(); 
} 
protected void ASPxGridView2_BeforeGetCallbackResult(object sender, EventArgs e) { 
    SetColumnSummary((ASPxGridView)sender, "UnitPrice"); 
} 
protected void ASPxGridView2_BeforePerformDataSelect(object sender, EventArgs e) { 
    Session["CategoryID"] = (sender as ASPxGridView).GetMasterRowKeyValue(); 
} 
protected void ASPxGridView2_DataBound(object sender, EventArgs e) { 
    SetColumnSummary((ASPxGridView)sender, "UnitPrice"); 
} 
0

我不知道DevExpress的,但在常规的GridView可以很容易地计算总计,并将它们显示页脚。

1)在一个单独的方法计算摘要:

double GrdTotal = 0; 
    protected void grdList_RowDataBound(object sender, GridViewRowEventArgs e) 
    { 
     double price = Convert.ToDouble(DataBinder.Eval(e.Row.DataItem, "UnitPrice")); 
     GrdTotal += price; 
     if (e.Row.RowType == DataControlRowType.Footer) 
     { 
      Label lblTotalPrice = (Label)e.Row.FindControl("UnitPrice"); 
      lblTotalPrice.Text = GrdTotal.ToString(); 
     } 
    } 
+0

@Özgür谢谢,但我想知道我怎么能做到这一点在ASPxGridview ..应该是不同的正常Gridview。 – 2011-03-20 20:08:51