2

私は多くのことを調べ、多くの提案をしましたが、何らかの理由で、チェックボックスリストから選択した項目を削除するためにこのコードが機能しない理由を理解できないようです:

void btn_remove_Click(object sender, EventArgs e)
    {
        for (int i = 0; i < UPCList.Items.Count; i++)
        {
            if (UPCList.Items[i].Selected == true)
            {
                UPCList.Items.RemoveAt(i);
            }

        }
        Response.Redirect("WebForm2.aspx?account=" + AcctNum.Text);
        Response.End();
    }
4

5 に答える 5

0

解決:

List<ListItem> toBeRemoved = new List<ListItem>();
for(int i=0; i<UPCList.Items.Count; i++){
    if(UPCList.Items[i].Selected == true)
        toBeRemoved.Add(UPCList.Items[i]);
}

for(int i=0; i<toBeRemoved.Count; i++){
    UPCList.Items.Remove(toBeRemoved[i]);
}

それが役に立てば幸い

于 2013-06-14T17:43:07.887 に答える
0

マイケル:

反復処理中のリストからアイテムを削除することはできません。削除するインデックスまたはアイテムの配列を作成し、ループが完了したら、配列からアイテムを削除します。

@ AnnArbor87 がこれを行うためのコードを提供したと思います。

HTH。

于 2013-06-21T21:29:47.870 に答える
0

それはPICNICの大きなケースになりました:)アイテムはデータベースにあったため、ページを更新すると、「削除」したアイテムが再び取得されました。それらをデータベースから削除すると、すべてが期待どおりに機能していました。

于 2014-06-18T21:39:05.213 に答える
-1

チェックボックスリストからアイテムを削除してからリダイレクトするポイントは何ですか? 行っている変更を表示しない

Webform2.aspx :

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm2.aspx.cs" Inherits="WebApplication1.WebForm2" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>

<asp:checkboxlist ID="UPCList" runat="server">
      <asp:ListItem>Item 1</asp:ListItem>
         <asp:ListItem>Item 2</asp:ListItem>
         <asp:ListItem>Item 3</asp:ListItem>
         <asp:ListItem>Item 4</asp:ListItem>
         <asp:ListItem>Item 5</asp:ListItem>
         <asp:ListItem>Item 6</asp:ListItem>
</asp:checkboxlist>
    </div>
        <asp:Button ID="btn_remove" runat="server" Text="Remove" OnClick="btn_remove_Click" />

    </form>
    <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
</body>
</html>

Webform2.aspx.cs :

using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace WebApplication1
{
    public partial class WebForm2 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Label1.Text = "Load";
        }

        public void btn_remove_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < UPCList.Items.Count; i++)
            {
                if (UPCList.Items[i].Selected == true)
                {
                    UPCList.Items.RemoveAt(i);
                }

            }
            Label1.Text = "Done";
        }
    }
}

期待どおりに動作します。

入れたら

Response.Redirect("WebForm2.aspx?account=" + AcctNum.Text);

I get Item 1 ... 6 削除

そして「ロード」と書かれたLabel1

また、明確にするために、私もやりたいです

  foreach (var toRemove in UPCList.Items.OfType<ListItem>().Where(f => f.Selected).ToList())
            {
                UPCList.Items.Remove(toRemove);
            }

しかし、それは単なる個人的な意見です。

于 2013-06-14T17:45:36.067 に答える