2017-04-18 14 views
0

autogeneratecolumnsがfalseに設定されているgridviewがあります。列にはデータに応じて動的に生成することができます。このグリッドビューでは、各アプリケーションに何人の時間を費やしているかが表示されます.Test1、test2、Test3およびTest4は人物の名前で、Projects(アプリケーション)は左側に表示されます。以下は、GridViewの自動生成列がfalseに設定されている場合のGridviewの合計の計算

Projects  Test1  Test2  Test3 

    Tickets   8   10 0 

    maintenance  9  11   13 


    Writing web  8   9   8 

    Total    25   30   21  

私は、データベースに新しいプロジェクトを追加し、上記のグリッドビューは、この

ようになることができるように、新しい人が新しいプロジェクトのための彼の時間を入力したときに上記のグリッドビューを動的に変更することができますです
Projects  Test1  Test2  Test3  Test4 

Tickets   8   10 0   0 

maintenance  9  11   13  0 


Writing web  8   9   8  0 

VSS             12.5 

Total    25   30   21  12.5 

グリッドビューのフッターの合計をすべての列に対して動的に計算する必要があります。いくつの列があり、列がクエリから来ているのかわからないときは、どうすればよいでしょうか。私はクエリからグリッドビューを表示しているだけなので、autogeneratecolumnsをfalseに設定しています。

ご協力いただきますようお願い申し上げます。

答えて

0

GridViewのOnRowDataBoundイベントでこれを行うことができます。

decimal total; 

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    //check if the current row is a datarow or the footer row 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     //cast the row back to a datarowview 
     DataRowView row = e.Row.DataItem as DataRowView; 

     //add the column value to the totals 
     total += Convert.ToDecimal(row["Test1"]); 

     //or by column index 
     total += Convert.ToDecimal(row[0]); 
    } 
    else if (e.Row.RowType == DataControlRowType.Footer) 
    { 
     //find a label in the footer with findcontrol 
     Label label = e.Row.FindControl("Label1") as Label; 

     //set the total value in the label 
     label.Text = string.Format("{0:N2}", total); 

     //set the footer value by cell index instead of a label 
     e.Row.Cells[1].Text = string.Format("{0:N2}", total); 
    } 
} 
+0

私は列の名前を知らない。その動的 – Anjali

+0

私の答えを更新しました。単に 'row [0]'というインデックスを使用してください – VDWWD

+0

私のカラム数も動的です。最初の列だけが文字列で、新しい人がチームに入ったばかりなので、他の人が追加されて、人test5が存在する可能性があります。どのように扱うのですか – Anjali

関連する問題