かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

VWPのテーブルに集計結果を表示してみよう

この1つ前の投稿は簡単すぎたので、もうちょいひねってみる。
最終的にこんな画面を目指す。

まずは、適当にデータプロバイダを作ってバインドした表を作る。
TableにTableRowGroupをドラッグアンドドロップで追加する。
んで、こんなBeanをDataProviderを作る。

// Bean
public class EmpAccum {
    private String title;
    private String value;
    
    /** Creates a new instance of EmpAccum */
    public EmpAccum() {
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getTitle() {
        return title;
    }

    public void setValue(String value) {
        this.value = value;
    }

    public String getValue() {
        return value;
    }
    
}
// DataProvider
public class EmpAccumDataProvider extends ObjectListDataProvider {
    
    /** Creates a new instance of EmpAccumDataProvider */
    public EmpAccumDataProvider() {
        setObjectType(EmpAccum.class);
    }
    
}

これをSessionBean1にプロパティでもたせてTableRowGroup2にバインドしておく。
TableLayoutはこんな感じ

そして、ボタンクリックのアクションの中身はこんな具合。
合計と平均を作ってDataProviderに設定してる。

    public String button1_action() {
        List emps = getSessionBean1().getEmployeesDataProvider().getList();
        int sum = 0;
        for (Iterator it = emps.iterator(); it.hasNext();) {
            Employees emp = (Employees) it.next();
            sum += emp.getSalary().intValue();
        }
        
        EmpAccum sumData = new EmpAccum();
        EmpAccum avgData = new EmpAccum();
        
        sumData.setTitle("合計:");
        sumData.setValue(Integer.toString(sum));
        
        avgData.setTitle("平均:");
        avgData.setValue(Integer.toString(sum / emps.size()));
        
        List accums = new ArrayList();
        accums.add(sumData);
        accums.add(avgData);
        getSessionBean1().getEmpAccumDataProvider().setList(accums);
        
        return null;
    }

これで実行すると…

まだタイトルが残る。
TableRowGroup2のカラムのTitleを空文字にすれば完成。
TableRowGroup2のemptyDataMsgには全角スペースぶちこんどいた。
これが一番目立たない?