2009-05-10 14 views
1

これを達成するためのチュートリアルをいくつか見てきました。ASP.Netグリッドビューロールビューの総計

私の意見では、各項目をプログラム的に参照する方法については、多くの事前知識が必要です。

ASP:Gridviewのフッターで稼働している合計を達成する方法の比較的基本的な例を誰かが作成したり作成したりできますか?

protected void InvoiceGridView_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    var invoice = (Invoice) e.Row.DataItem; 
    if (e.Row.RowType == DataControlRowType.Header) 
    { 
     totalAmt = 0; 
    } 
    else if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     totalAmt += invoice.Amount; 
    } 
    else if (e.Row.RowType == DataControlRowType.Footer) 
    { 
     var amountTotalLabel = (TextBox) e.Row.FindControl("AmountTotalTextBox"); 
     amountTotalLabel.Text = totalAmt.ToString("0.00"); 
    } 
} 

TotalAmtは、ページ上のインスタンス変数を保護されています:

答えて

2

は、これは私が使用するものです。 「プログラム的な知識」についてのあなたのコメントに基づいて、あなたが探していたものかどうかは不明です。しかし、それは動作し、かなり単純です。この場合、グリッドビューはList<Invoice>にバインドされています。

0

はフッターのテンプレートを追加し、RowDataBoundで、合計和を格納するグローバル変数を持っている、e.Row.RowType = DataControlRowType.DataRowタイプで

は、加算を行い、そしてe.Row @。これは私がそれを行う方法であるMSDN LINK

0

@見ROWTYPE = DataControlRowType.Footerはさらに情報のための適切な細胞

に谷を格納します。非常に簡単。あなたはあなたの数字が入っている行を合計し、それをフッターに配置します。

((Label)GridView.FooterRow.Cells[1].FindControl("your_label")).Text = ds.Tables[0].Compute("sum(Column_name)", "").ToString(); 
0

私が使用方法はかなり基本的であり、それはあなたが何を意味するかだ場合は、GridViewの中の列を参照するプログラム的に必要としないと思います。これは素晴らしい部分の1つです。バックエンド関数を記述すると、.aspxファイルを編集するだけで、すべてのGridviewに合計を追加できます。あなたのGridViewで

、このような列を作る:DisplayAndAddToTotalへ

<asp:TemplateField HeaderText="Hours"> 
    <ItemTemplate><%#DisplayAndAddToTotal(Eval("Hours").ToString(), "Hours")%></ItemTemplate> 
    <FooterTemplate><%#GetTotal("Hours")%></FooterTemplate> 
</asp:TemplateField> 

2番目のパラメータは、あなたがいる限り、あなたがGetTotalで同じ文字列を使用してたい任意の文字列を指定できます。私は通常、フィールド名をもう一度使用します。 DisplayAndAddToTotalとGetTotalの2つの関数が使用されます。彼らはハッシュテーブルを使用して合計を保存し、追加する列の数に関係なく動作します。また、ブール値フィールドの「真」の数を数えることもできます。

Protected total As Hashtable = New Hashtable() 

Protected Function DisplayAndAddToTotal(itemStr As String, type As String) As Double 
    Dim item As Double 

    If itemStr = "True" Then 
     item = 1 

    ElseIf Not Double.TryParse(itemStr, item) Then 
     item = 0 
    End If 

    If total.ContainsKey(type) Then 
     total(type) = Double.Parse(total(type).ToString()) + item 
    Else 
     total(type) = item 
    End If 

    Return item 
End Function 

Protected Function GetTotal(type As String) As Double 
    Try 
     Dim result As Double = Double.Parse(total(type).ToString()) 
     Return result 
    Catch 
     Return 0 
    End Try 
End Function