0

各 ItemTamplate に 1 つのチェックボックスがあるデータリスト コントロールがあります。チェックボックスに加えて、一部のドキュメントを表示するためのハイパーリンクもあります。ユーザーは、StringBuilder を使用して、ラベル コントロールに対応するドキュメントを表示するチェックボックスをクリックできる必要があります。以下のコードはほとんど機能していますが、重複が表示されます。たとえば、行 1 のチェックボックスを選択してから行 2 の別のチェックボックスを選択すると、Label コントロールは行 1 のドキュメントを 2 回表示し、次に行 2 のドキュメントを表示します。一度。関連するコードは次のとおりです。ありがとう!

<tr runat="server" id="tr_data">
                                    <td>
                                        <asp:CheckBox runat="server" ID="cb_docid" Value='<%# Eval("docid") %>' OnCheckedChanged="displayselectedinit"
                                            AutoPostBack="true" />
                                        <asp:HyperLink ID="hpl_docfileencr" Text='<%# Eval("docfileencr") %>' NavigateUrl='<%# "~/PDFEncr/" + DataBinder.Eval(Container.DataItem, "docfileencr") %>'
                                            Target="_blank" runat="server" />
                                        <br />
                                    </td>
                                </tr>

protected void displayselected()
{
    //return;
    lbl_currselection.Text = "";
    StringBuilder docselected = new StringBuilder();

   foreach (DataListItem li in DataList1.Items)
    {
        if (li.ItemType == ListItemType.Item || li.ItemType == ListItemType.AlternatingItem)
        {
            CheckBox cb = li.FindControl("cb_docid") as CheckBox;
            if (cb != null)
            {
                if (cb.Checked)
                {
                    HyperLink hpl_docfile = li.FindControl("hpl_docfileencr") as HyperLink;
                    docselected.Append(hpl_docfile.Text + "<br />");
                    lbl_currselection.Text += docselected;

                }
            }
        }
    }
}
4

2 に答える 2

1
 docselected.Append(hpl_docfile.Text + "<br />");
 lbl_currselection.Text += docselected;

stringbuilderを追加し、ラベルを追加します。

現在、コードは次のように実行されています。

最初のループ:

Adding: Text1
docselected = Text1<br/>
lbl_currselection = Text1<br/>

2番目のループ:

Adding: Text2
docselected = Text1<br/>Text2<br/>
lbl_currselection = Text1<br/>Text1<br/>Text2<br/>

lbl_currselection.Textを(ループの外で)最後に移動して、次を使用します。

foreach (DataListItem li in DataList1.Items)
{
    if (li.ItemType == ListItemType.Item || li.ItemType == ListItemType.AlternatingItem)
    {
        CheckBox cb = li.FindControl("cb_docid") as CheckBox;
        if (cb != null)
        {
            if (cb.Checked)
            {
                HyperLink hpl_docfile = li.FindControl("hpl_docfileencr") as HyperLink;
                docselected.Append(hpl_docfile.Text + "<br />");                    
            }
        }
    }
}
lbl_currselection.Text = docselected;
于 2012-04-10T14:35:41.067 に答える
1

これは機能します:

protected void DisplaySelected(Object sender, EventArgs e)
{
    var selected = DataList1.Items.Cast<DataListItem>()
        .Where( li => ((CheckBox)li.FindControl("cb_docid")).Checked)
        .Select(li => ((HyperLink)li.FindControl("hpl_docfileencr")).Text);
    lbl_currselection.Text = String.Join("<br />", selected);
}
于 2012-04-10T14:42:27.247 に答える