0

Inside form there is gridview which is populated with following columns

CODE, NAME, PRICE, QNT, TOTAL
1     Test  4.00    1   4.00
2     Test2 3.50    2   7.00

How can I calculate this total column to be in this case 11.00 and for example add that value to the labelOverall.Text property?

Thanks

Update

Gridview is populated like this

var sel = (Article)cmbArticleList.SelectedItem;

            DataRow newRow = articlesTable.NewRow();
            newRow["CODE"] = sel.Code;
            newRow["Name"] = sel.Name;

            articlesTable.Rows.Add(newRow);
            articlesGridView.DataSource = articlesTable;
4

5 に答える 5

2

DataSource一般に、できればデータベース自体で合計を計算するには、常に を使用する必要があります。ただし、後でクライアントで計算する場合は、セル テキストを解析するか、グリッドを使用する他のアプローチではなく、とにかくグリッドのデータ ソースを優先する必要があります。

たとえば、DataBoundすべての行がデータバインドされた直後にトリガーされるイベントでは、次のようになります。

protected void GridDataBound(object sender, EventArgs e)
{
    GridView grid = (GridView)sender;
    DataTable source = (DataTable)grid.DataSource;
    decimal totalSum = source.AsEnumerable().Sum(r => r.Field<decimal>("Total"));
    labelOverall.Text = totalSum.ToString();
}

Fieldメソッドは厳密に型指定されており、実際の型が異なる場合は例外がスローされることに注意してください。

于 2013-07-02T09:19:51.913 に答える
1

DataTable には、テーブル データに対して計算を実行できるComputeメソッドがあります。

したがって、合計行の合計を計算するには、次のようにします。

var sum = articlesTable.Compute("SUM(TOTAL)", "");
newRow["Total"] = sum;

これにより、合計が計算され、合計行が更新されます。

テーブルに行を追加する前に、必ずこれを行ってください。:-)

編集:
Compute メソッドの 2 番目の引数はフィルター式です。これにより、必要に応じて計算に含める行をフィルタリングできます。

于 2013-07-02T09:18:15.807 に答える
0

としてそれを行う

int sum;
sum = articlesTable.Compute("Sum(COLUMNNAME)", "COLUMNNAME<> 0"); 

次に、sumその列の合計を取得します

于 2013-07-02T09:19:52.133 に答える
0

コードで次のことを試してください。

int sum = 0;
for(int i=0; i<gv.Rows.Count; i++)
{
   sum += gv[i, 4].Value;
}
于 2013-07-02T09:15:22.130 に答える
0

このようなもの:

labelOverall.Text  = articlesGridView.Rows.Cells.Select(n => Convert.ToDouble(n["TOTAL"].Value)).Aggregate((a,b) => a + b).ToInvariantString();

これにより、すべての合計セルが選択および変換され、それらが合計され、答えが に割り当てられlabelOverall.Textます。

于 2013-07-02T09:17:54.143 に答える