0

データベースで 3 つのテーブルを使用しています。最初のテーブルには「Accounts」というラベルが付けられ、2 番目の「AccountItems」と 1 対多の関係があります。AccountItems テーブルにはサイズ列があります。3 番目のテーブルは、この質問に少し関係がありますが、多くのアカウントを持つ「顧客」です。

Account テーブルにバインドされた RadGrid を作成しています。次のようになります。

Customer | Location | Account# | Total Size
___________________________________________

アイテム テンプレートでナビゲーション プロパティが機能したため、顧客と同様に、場所とアカウント番号は簡単です。

ただし、私の問題はサイズ列です。各 AccountItem の Size を合計する必要があります。たとえば、それぞれのサイズが「50」の AccountItem が 4 つある場合、合計は 200 になります。Customer に対して行ったように、Eval() で子関係を単純にナビゲートできるようには見えません。列コードでこれを行うことは可能ですか、または OnItemCreated のサーバー側イベント ハンドラーを行う必要がありますか?

編集

私は一時的な修正のためにそれを理解しました。

<ItemTemplate>
    <asp:Label ID="lblSizeSum" runat="server"Text='<%# CalculateSizeTotal((MS_Accounts)Container.DataItem)%>'>
<ItemTemplate>

そして、コードビハインド:

Protected string CalculateSizeTotal(MS_Accounts dataItem)
    {
        return dataItem.MS_AccountLoads.Sum(s => s.Size).ToString();

    }

これについて私が気に入らない唯一のことは、キャストのために ORM に直接アクセスすることによる MVC の明らかな違反です。

4

1 に答える 1

0

以下のコード スニペットを確認してください。何か不足していたり​​、要件を理解していない場合はお知らせください。

.aspx

  <telerik:RadGrid ID="RadGrid2" runat="server" AllowPaging="True" AllowSorting="True"
        OnNeedDataSource="RadGrid2_NeedDataSource" AutoGenerateColumns="False" 
        onitemdatabound="RadGrid2_ItemDataBound">
        <MasterTableView>
            <Columns>
                <telerik:GridBoundColumn DataField="CustomerID" HeaderText="CustomerID" UniqueName="CustomerID">
                </telerik:GridBoundColumn>
                <telerik:GridTemplateColumn>
                    <ItemTemplate>
                        <asp:Label ID="Label1" runat="server" ></asp:Label>
                    </ItemTemplate>
                </telerik:GridTemplateColumn>
            </Columns>
        </MasterTableView>

    </telerik:RadGrid>

.aspx.cs

公開部分クラス フォーラムページ: System.Web.UI.Page {

protected void RadGrid2_NeedDataSource(object sender, GridNeedDataSourceEventArgs e) { RadGrid2.DataSource = getDatarofGrid(); }

protected List<Customer> getDatarofGrid()
{
    List<Customer> lstCustomer = new List<Customer>();
    Customer customer;

    for (int i = 0; i < 3; i++)
    {
        customer = new Customer();
        customer.CustomerID = i;

        List<Sizes> lstSize = new List<Sizes>();
        Sizes sizes;
        for (int j = 0; j < 3; j++)
        {
            sizes = new Sizes();
            sizes.size = i + 100;
            lstSize.Add(sizes);
        }

        customer.sizes = lstSize;
        lstCustomer.Add(customer);
    }



    return lstCustomer;
}
protected void RadGrid2_ItemDataBound(object sender, GridItemEventArgs e)
{
    if (e.Item is GridDataItem)
    {
        GridDataItem item = e.Item as GridDataItem;
        Label Label1 = item.FindControl("Label1") as Label;

        Customer objcustomer = item.DataItem as Customer;

        if (objcustomer != null && objcustomer.sizes.Count > 0)
        {
           Label1.Text =  objcustomer.sizes.Sum(i => i.size).ToString();
        }
    }
}

}

public class Customer { public int CustomerID { get; 設定; } public リストのサイズ { get; 設定; } }

public class Sizes { public int size { get; 設定; } }

于 2012-06-07T08:42:29.907 に答える