0

DB に 3 つのテーブルがあります。
「AccountAccessRight」テーブルをジャンクション テーブルとして NN リレーションを実装しました。
したがって、「Account」テーブルは「AccountAccessRight」と 1 対 N の関係を持ち、「AccountAccessRight」は「NextOfKin」テーブルと N 対 1 の関係を持ちます。
「Repeater1」ですべてのアカウントをリストし、各アカウントのすべての NextOfKins をリストしたい。
DB ダイアグラムは次のとおりです: 代替テキスト http://sites.google.com/site/mahdiahmadirad/download-1/2009-12-12_032800.png?attredirects=0

だから私はこのコードを書きました:

<asp:Repeater ID="Repeater1" runat="server" DataSourceID="ObjectDataSource1">
        <HeaderTemplate>
        </HeaderTemplate>
        <ItemTemplate>
            <div style="clear: both;">
                <img style="float: right;" alt="" src="./img/account.png" />
                <a href='<%# Eval("AccountUrl")%>'>
                    <%# Eval("AccountTitle")%>
                </a>
                <br />
                <span>نام کاربري:</span><%# Eval("AccountUsername")%><br />
                <asp:Repeater ID="Repeater2" DataSource="<%# ((aspnet_AccountTable)(Container.DataItem)).aspnet_AccountAccessRights %>"
                    runat="server">
                    <ItemTemplate>
                        <asp:Repeater ID="Repeater3" DataSource="<%# ((aspnet_AccountAccessRight)(Container.DataItem)).aspnet_NextOfKinTable %>"
                            runat="server">
                            <HeaderTemplate>
                                <hr />
                            </HeaderTemplate>
                            <ItemTemplate>
                                <span>وارث يا وارثان:</span>
                                <div>
                                    <a href='<%# Eval("NoKId","./FullInfo.aspx?Mode=view&nok={0}")%>'>
                                        <%# Eval("Firstname")%>
                                        <%# Eval("Lastname")%>
                                    </a>,
                                </div>
                            </ItemTemplate>
                            <FooterTemplate>
                                <hr />
                            </FooterTemplate>
                        </asp:Repeater>
                    </ItemTemplate>
                </asp:Repeater>
                <%--<span>وارث(ان) حساب:</span><%# Eval("Relationship")%><br />--%>
                <%--<span>نام وارث:</span><%# Eval("FirstName") %>&nbsp;<%# Eval("LastName") %>--%>
            </div>
        </ItemTemplate>
    </asp:Repeater>

repeater2 と 3 の DataSource を見てください。
Repeater3 をコンパイルすると例外が発生します。
「objectdatasource1」はすべての aspnet_accountTable を投影するだけであることに注意してください。

...
from acc in db.aspnet_AccountTable
select acc;
...

手伝って頂けますか?

追加: 完全な例外の詳細は次のとおりです。

System.ArgumentException was unhandled by user code
  Message="An invalid data source is being used for Repeater3. A valid data source must implement either IListSource or IEnumerable."
  Source="System.Web"
  StackTrace:
       at System.Web.UI.WebControls.Repeater.set_DataSource(Object value)
       at ASP.user_accounts_default_aspx.__DataBinding__control9(Object sender, EventArgs e) in g:\MyProjects\ASP.net Projects\After Dyeing\WebSite\User\Accounts\Default.aspx:line 30
       at System.Web.UI.Control.OnDataBinding(EventArgs e)
       at System.Web.UI.WebControls.Repeater.OnDataBinding(EventArgs e)
       at System.Web.UI.WebControls.Repeater.DataBind()
       at System.Web.UI.Control.DataBindChildren()
  InnerException: 
4

1 に答える 1

1

LINQ GROUP BY データを使用してネストされたリピーターをバインドしているときに、同じ例外が発生しました。プロパティを匿名型に設定し、ネストされたリピーターのバインド中に対応するデータ ソースをフェッチすることで、この問題を修正しました。

以下の 2 行のコードが役立つと思います。

参考までに lstGroups =グループが 2 つのプロパティを持つリスト [SiteUrl, GroupName] これらのグループを SiteUrl でグループ化して表示したい

//data source for Parent Repeater
var Result = lstGroups.OrderBy(o => o.GroupName).GroupBy(d => d.SiteUrl).Select(s => new { SiteUrl = s.Key, Groups= s });

//On Item Data Bound of Parent Repeater, Bind child repeater

var obj = DataBinder.Eval(e.Item.DataItem, "Groups");

rptChild.DataSource = obj;

rptChild.DataBind();
于 2011-01-25T12:38:40.593 に答える