C# 从DropDownList中删除项目
我有两个下拉列表,一个是士兵类型,一个是我允许购买的士兵数量。我在aspx页面中使用LinqDataSource填充DDL,如下所示:C# 从DropDownList中删除项目,c#,asp.net,drop-down-menu,C#,Asp.net,Drop Down Menu,我有两个下拉列表,一个是士兵类型,一个是我允许购买的士兵数量。我在aspx页面中使用LinqDataSource填充DDL,如下所示: <asp:DropDownList ID="ddlSoldiers" runat="server" DataSourceID="LinqDataSource2" DataTextField="type" DataValueField="troopid" AutoPostBa
<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>
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());
}
}
}
protected void btnBuySoldier_Click(object sender, EventArgs e)
{
string numbertobuy = ddlSoldierNumber.SelectedItem.Value;
lblAntall.Text = numbertobuy;
}
我已经试着说:
ddlSoldierNumber.Items.Clear();
其他地方,但没有任何运气。有人知道我如何在按下按钮后和重新填充ddlSolderNumber之前清除数字列表吗?如果我没记错,页面加载在按钮的eventhandler之前运行,您是否尝试过放置ddlSolderNumber.Items.clear();在更改标签后单击eventhandler? (我知道这不能解决你的第一个问题) 为此,你可以试试:(如果我弄糊涂了,我道歉,我不善于解释自己) 您可以为ddlSoldierNumber列表创建一个“填充”方法,在单击事件后调用该方法。
在页面加载中,您可以检查“if(!PostBack)”运行默认启动逻辑。如果您想根据从DDL中选择的内容填充ddlSoldierNumber,则无法在页面加载事件中向ddlSoldierNumber添加值。为此,您必须在(DDL)所选索引更改事件中添加页面加载事件代码
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());
}
}
}
protected\u SelectedIndexChanged(对象发送方,事件参数e)
{
if(Session[“userRole”]==null | | Session[“userRole”]等于(“admin”))
{
重定向(“Login.aspx”);
}
int userid=Convert.ToInt32(会话[“userid]”);
if(string.IsNullOrEmpty(ddl.SelectedValue))
{
var varTroopType=dc.forces.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 var建筑物数=
单个(t=>(t.buildingid==buildingid)&&(t.userid==userid)).number;
int numberOfBuildings=转换为Int32(varNumberOfBuildings);
对于(inti=1;ib.soldierType==troopType).buildingid;
int buildingId=Convert.ToInt32(varBuildingId);
var var建筑物数=
单个(t=>(t.buildingid==buildingid)&&(t.userid==userid)).number;
int numberOfBuildings=转换为Int32(varNumberOfBuildings);
对于(inti=1;i
'ddlSoldierNumber.Items.Clear();'如果要清除列表,是否已将按钮的“回发”属性设置为True?是的,您确实希望将页面加载中发生的事情包装在if(!PostBack)中。请记住,每次用户单击任何内容时都会运行此功能。您不希望每次调用回发时都清除列表并重新填充它们