0

リピーターがいて、チェックボックスがあります。checkchanged イベント行の最初の行をクリックすると、下に情報が表示されます。しかし、最初のクリックの後、私は問題を抱えています。情報が同じ場合もあります。foreach は常に最初のクリックを確認するためです。たとえば、私は 2 番目のものをチェックし、情報を見ました。それから 2 番目の項目をクリックすると、情報が表示されましたが、今回は最初の項目をクリックしました。Foreach は最初のチェックボックスを取り、ポストバックの前に最後のチェックボックスをチェックして、2 番目のチェックボックスを再度実行します。これを修正する方法はありますか?これが私のサンプルコードです。

<asp:Repeater ID="rptInformations" runat="server">
     <ItemTemplate>
         <asp:CheckBox ID="ckChoose" runat="server" OnCheckedChanged="ckChoose_CheckedChanged" AutoPostBack="true" />
         <div id="foo" runat="server"> ... some basic titles ...</div>
     </ItemTemplate>
<asp:Repeater>
<div id="info" runat="server"> ... informations in here (textboxes, labels ..etc)</div>

CodeBehind:
foreach (RepeaterItem item in rptInformations.Items)
{
       //CheckBox ckChoose= (CheckBox)sender;
       CheckBox ckChoose= item.FindControl("ckChoose") as CheckBox;
       if (cBoxChoose.Checked)
       {
            ... database process ...
       }
}
4

2 に答える 2

1

チェックボックスをオンにするたびにイベントをトリガーしようとしていると私が理解していることについては、それが属するリピーターの行に応じて特定の情報が表示されます。このため、 Repeater.aspx というページでこの例を作成しましたすべてではなく、1 つのチェックボックスに対してのみ発生するイベント:

リピーター.aspx:

<asp:Repeater runat="server" ID="repeater">
        <ItemTemplate>
         <asp:CheckBox ID="ckChoose" runat="server" AutoPostBack="true" OnCheckedChanged="ckChoose_CheckedChanged"/>
         <div id="foo" runat="server"> <%# Eval("Field2")%></div>
        </ItemTemplate>
        </asp:Repeater>
<div id="info" runat="server"> ... informations in here (textboxes, labels ..etc)</div>

Repeater.aspx.cs (分離コード):

partial class Repeater1 : System.Web.UI.Page
{

    private System.Collections.Generic.List<Item> Elements()
    {

        Generic.List<Item> itemList = new Generic.List<Item>();
        itemList.Add(new Item("1", "One"));
        itemList.Add(new Item("2", "Two"));

        return itemList;

    }


    protected void  Page_Load(object sender, System.EventArgs e)
    {

        if (!Page.IsPostBack) {
            this.repeater.DataSource = this.Elements();
            this.repeater.DataBind();

        }

    }


    protected void ckChoose_CheckedChanged(object sender, System.EventArgs e)
    {
        CheckBox chk = (CheckBox)sender;
        this.info.InnerHtml = "checkbox:" + chk.ID + " foo:" + ((HtmlGenericControl)chk.Parent.FindControl("foo")).InnerText;

    }

}

お役に立てれば。

于 2012-09-13T07:23:00.320 に答える
0

私はネーミングコンテナでそれを修正すると思います。それは完璧に機能します。

foreach (RepeaterItem item in Repeater1.Items)
        {
            CheckBox cBoxx = item.FindControl("ckChoose") as CheckBox;
            current_cbId = cBoxx.NamingContainer.UniqueID.ToString();

            if (cBoxx.Checked)
            {
                ... some operations ...

            }

            if (cBoxChoose.NamingContainer.UniqueID.ToString() != current_cbId)
                cBoxChoose.Checked = false;
        }
于 2012-09-13T12:52:13.777 に答える