1

ユーザー コントロール ページ、つまりテンプレート (.ascx) があり、ストアド プロシージャの実行によって読み込まれるリピーターがあります。各行にボタンと一緒に独自のリピーターを持つ親ページもあり、このリピーターもストアドプロシージャの実行で読み込まれます。

ここで、親リピーターの各行のボタンをクリックすると、その特定の行の最初の 2 つの列の値 (例: G6300 および Group Term Ife Insurance) が、子リピーターが存在するテンプレートに存在するストアド プロシージャに渡される必要があります。が存在し、子リピーターが表示されるはずです。

これまで、親リピーターの表示に成功し、ボタンクリックでその特定の行の値を子ストアドプロシージャに渡し、子ストアドプロシージャを実行して結果をリストに取得することにも成功しました。しかし、このリストをテンプレート ページに存在する子リピーターに割り当てようとすると、子リピーターに例外が発生します (System.NullReferenceException: オブジェクト参照がオブジェクトのインスタンスに設定されていません)。

子リピーターの初期化が不足しているため、null であると推測しています。しかし、それについても解決策についても完全に前向きではありません。

何か提案してください。

//テンプレート コード (内部リピーター)

        protected void Page_Load(object sender, EventArgs e)
    {

        if (Page.IsPostBack)
        {
            return;
        }

    }

    public void LoadRepeater(string id, string policyNo, string desc) //gets called from parent repeater
    {
        //Loading the tempalte
        StringBuilder template1 = MembershipRepository.LoadPolicyDetailsTemplate("PolicyDetailsTemplate1.ascx");

        CustomerPortalWebContentEntities context = new CustomerPortalWebContentEntities();
        RetrievePolicyDetails policyDetails = new RetrievePolicyDetails();
        List<PolicyDetails> polDetails = policyDetails.GetPolicyDetails(id, policyNo, desc); //polDetails HAS ALL THE REQUIRED ROWS


        rptPolicyDetails.DataSource = polDetails; //EXCEPTION ON THIS LINE
        rptPolicyDetails.DataBind();




    }

// テンプレート/子リピーターが呼び出される親ページ (親リピーター) の各行のボタン クリック イベント

protected void rptCoverage_ItemCommand(object source, RepeaterCommandEventArgs e)
    {
        if (e.CommandName == "CoverageDetails")
        {
            //Button was clicked
            var policy = e.Item.FindControl("lblPolicyNo") as Label;
            var description = e.Item.FindControl("lblDescription") as Label;
            var idPerson = id_person;

            var placeHolder = e.Item.FindControl("UCPlaceHolder") as Control;

            placeHolder.Controls.Add((PolicyDetailsTemplate1)Page.LoadControl("~/Shared/Controls/PolicyDetailsTemplate1.ascx")); 

            //this.placeHolder.Controls.Add((PolicyDetailsTemplate1)Page.LoadControl("~/Shared/Controls/PolicyDetailsTemplate1.ascx")); 

            //calling the specific tempalte with specific sp                                        /**/  will change w.r.t multiple templates
            PolicyDetailsTemplate1 template = new PolicyDetailsTemplate1();
            template.LoadRepeater(idPerson, policy.Text.Trim(), description.Text.Trim());



        }
    }

//ここに出力のスニペットがあります ここに画像の説明を入力

4

1 に答える 1

0

PlaceHolder に追加しているものとは異なる PolicyDetailsTemplate1 のインスタンスにデータをバインドしています。

ここでは、1 つの PolicyDetailsTemplate1 を PlaceHolder に追加します。

placeHolder.Controls.Add((PolicyDetailsTemplate1)Page.LoadControl("~/Shared/Controls/PolicyDetailsTemplate1.ascx")); 

ただし、まったく新しいインスタンスを作成します。

//calling the specific tempalte with specific sp
PolicyDetailsTemplate1 template = new PolicyDetailsTemplate1();
template.LoadRepeater(idPerson, policy.Text.Trim(), description.Text.Trim());

代わりに、1 つの PolicyDetailsTemplate1 を作成し、その Repeater をバインドしてから、PlaceHolder に追加することもできます。

PolicyDetailsTemplate1 template = (PolicyDetailsTemplate1)Page.LoadControl("~/Shared/Controls/PolicyDetailsTemplate1.ascx);
template.LoadRepeater(idPerson, policy.Text.Trim(), description.Text.Trim());
placeHolder.Controls.Add(template);
于 2014-07-14T21:28:22.630 に答える