从下拉列表中删除项目

本文关键字:删除项目 下拉列表 | 更新日期: 2023-09-27 18:29:27

我有两个下拉列表,一个是士兵类型,另一个是我允许购买的士兵数量。我在aspx页面中用LinqDataSource填充ddlSoldiers,如下所示:

<asp:DropDownList ID="ddlSoldiers" runat="server" 
                    DataSourceID="LinqDataSource2" DataTextField="type" 
                    DataValueField="troopid" AutoPostBack="True">
                </asp:DropDownList>
                <asp:LinqDataSource ID="LinqDataSource2" runat="server" 
                    ContextTypeName="BrowserSpill.LinqClass1DataContext" EntityTypeName="" 
                    Select="new (type, troopid)" TableName="Troops">
                </asp:LinqDataSource>

另一个列表ddlSoldierNumber在页面加载中填充如下:

protected void Page_Load(object sender, EventArgs e)
    {
        if (Session["userRole"] == null || Session["userRole"].Equals("admin"))
        {
            Response.Redirect("Login.aspx");
        }
        int userid = Convert.ToInt32(Session["userid"]);
        if(string.IsNullOrEmpty(ddlSoldiers.SelectedValue))
        {
            var varTroopType = dc.Troops.Single(t => t.troopid == 1).type;
            string troopType = Convert.ToString(varTroopType);
            var varBuildingId = dc.Buildings.Single(b => b.soldierType == troopType).buildingid;
            int buildingId = Convert.ToInt32(varBuildingId);
            var varNumberOfBuildings =
            dc.Towns.Single(t => (t.buildingid == buildingId) && (t.userid == userid)).number;
            int numberOfBuildings = Convert.ToInt32(varNumberOfBuildings);
            for (int i = 1; i < numberOfBuildings + 1; i++)
            {
                ddlSoldierNumber.Items.Add(i.ToString());
            }
        }
        else
        {
            ddlSoldierNumber.Items.Clear();
            string troopType = ddlSoldiers.SelectedItem.Text;
            var varBuildingId = dc.Buildings.Single(b => b.soldierType == troopType).buildingid;
            int buildingId = Convert.ToInt32(varBuildingId);
            var varNumberOfBuildings =
                dc.Towns.Single(t => (t.buildingid == buildingId) && (t.userid == userid)).number;
            int numberOfBuildings = Convert.ToInt32(varNumberOfBuildings);

            for(int i = 1; i < numberOfBuildings+1; i++)
            {
                ddlSoldierNumber.Items.Add(i.ToString());
            }
        }
    }

但当我想从ddlSoldierNumber中获取值时,我只获取该列表中的第一个值。我试着点击这样的按钮来获取号码:

protected void btnBuySoldier_Click(object sender, EventArgs e)
    {
        string numbertobuy = ddlSoldierNumber.SelectedItem.Value;
        lblAntall.Text = numbertobuy;
    }

我试着把线:

ddlSoldierNumber.Items.Clear();

其他地方,但没有任何运气。有人知道我按下按钮后,在ddlSoldierNumber重新填充之前如何清除号码列表吗?

从下拉列表中删除项目

如果要根据从ddlSoldierNumber中选择的内容填充ddlSoldierNumber,则不能在页面加载事件中向ddlSol迭rNumber添加值。为此,您必须在(ddlSoldiers)选定的索引更改事件中添加页面加载事件代码。

protected void ddlSoldiers_SelectedIndexChanged(object sender, EventArgs e)
{
    if (Session["userRole"] == null || Session["userRole"].Equals("admin"))
    {
        Response.Redirect("Login.aspx");
    }
    int userid = Convert.ToInt32(Session["userid"]);
    if (string.IsNullOrEmpty(ddlSoldiers.SelectedValue))
    {
        var varTroopType = dc.Troops.Single(t => t.troopid == 1).type;
        string troopType = Convert.ToString(varTroopType);
        var varBuildingId = dc.Buildings.Single(b => b.soldierType == troopType).buildingid;
        int buildingId = Convert.ToInt32(varBuildingId);
        var varNumberOfBuildings =
        dc.Towns.Single(t => (t.buildingid == buildingId) && (t.userid == userid)).number;
        int numberOfBuildings = Convert.ToInt32(varNumberOfBuildings);
        for (int i = 1; i < numberOfBuildings + 1; i++)
        {
            ddlSoldierNumber.Items.Add(i.ToString());
        }
    }
    else
    {
        ddlSoldierNumber.Items.Clear();
        string troopType = ddlSoldiers.SelectedItem.Text;
        var varBuildingId = dc.Buildings.Single(b => b.soldierType == troopType).buildingid;
        int buildingId = Convert.ToInt32(varBuildingId);
        var varNumberOfBuildings =
            dc.Towns.Single(t => (t.buildingid == buildingId) && (t.userid == userid)).number;
        int numberOfBuildings = Convert.ToInt32(varNumberOfBuildings);

        for (int i = 1; i < numberOfBuildings + 1; i++)
        {
            ddlSoldierNumber.Items.Add(i.ToString());
        }
    }
}

如果我没记错的话,页面加载是在按钮的事件处理程序之前运行的,你试过放置ddlSolderNumber.Items.Clear()吗;在更改标签后单击事件处理程序中?(我知道这不能解决你的第一个问题)

为此,你可以试试:(如果我感到困惑,我道歉,我不善于解释自己)您可以为ddlSoldierNumber列表创建一个"populate"方法,在单击事件后调用该方法。在页面加载中,您可以在检查"if(!PostBack)"时运行默认的启动逻辑。