0

リンクのリストを chartfx 表示で表示する for ループを作成しています。chartfx には sqlDataSource が必要です。for ループが 1 回反復するたびに一意の ID を付与しようとしていますが、値または関数を渡すことができません。私のコードの下の例。getSQLID() は、ID にしたい文字列を返す単なる関数です。これはすべて aspx ページで行われ、関数は .cs にあります。どんな助けでも本当にありがとうございました。

     //name of the contentplace holder on the aspx page
    <asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server" >

    //code behind
    Control ctrl = LoadControl("WebUserControl.ascx");
    Control placeHolderControl = this.FindControl("Content2");
    Control placeHolderControl2 = this.FindControl("ContentPlaceHolder1");

    ctrl.ID = "something";
    if (placeHolderControl != null)
        placeHolderControl.Controls.Add(ctrl);
    if (placeHolderControl2 != null)
        placeHolderControl2.Controls.Add(ctrl);
4

1 に答える 1

1

まず、このようにデザイナで宣言されたサーバー コントロールは、コンパイル時にクラスにアタッチされることを思い出してください。そのため、実行時にループ内で複数のインスタンスを作成しようとしても意味がありません。そのため、コンパイル時に Id タグなどの値を認識しておく必要があります。

1 つの代替方法は、次のようなコード ビハインドでそれらを作成することです。

for (int i=0; i<2; ++i)
{
    var chart = new Chart();
    chart.Id = "chartId" + i;
    chart.DataSourceId = "srcid" + i;

    var src = new SqlDataSource();
    src.Id = "srcid" + i;

    Controls.Add(chart); // either add to the collection or add as a child of a placeholder
    Controls.Add(src);
}

あなたの場合、これらすべての宣言型プロパティをコード ビハインドに変換するのは少し手間がかかります (可能ですが)。別の方法は、現在 aspx ページにあるマークアップを含むユーザー コントロール (ascx) を作成することです。次のようなコード ビハインドでコントロールをインスタンス化します。

for (int i=0; i<2; ++i)
{
    var ctrl = LoadControl("~/path/to/Control.ascx");
    ctrl.Id = "something_" + i;
    Controls.Add(ctrl); // again, either here or as a child of another control
    // make the src, hook them up
}
于 2013-03-27T15:53:09.640 に答える