我已经在我的网页中实现了一个下拉列表并将其绑定到我创建的数据源但是无论我在页面中选择了什么,dropdownlist.selectedItem
总是让我得到第一个元素{{1总是0.我用其他例子将我的代码签约,但却找不到原因
这是数据源创建和绑定的代码:
SelectedIndex
我在page_load中调用了 public void bindLanguage() {
DropDownList1.DataSource = CreateDataSource();
DropDownList1.DataTextField = "language";
DropDownList1.DataValueField = "value";
DropDownList1.DataBind();
}
public ICollection CreateDataSource()
{
string[] allLan = System.IO.File.ReadAllLines(MyGlobal.LanFile);
DataTable dt = new DataTable();
DataRow dr;
dt.Columns.Add(new DataColumn("language", typeof(string)));
dt.Columns.Add(new DataColumn("value", typeof(string)));
foreach (string lan in allLan)
{
dr = dt.NewRow();
dr[0] = lan.Split(',')[0];
dr[1] = lan.Split(',')[1];
dt.Rows.Add(dr);
}
DataView dv = new DataView(dt);
return dv;
}
这是我的aspx中的代码:
bindLanguage()
答案 0 :(得分:0)
也许你应该在DropDownList的标记代码中添加AutoPostBack="false"
。
如果未设置或为true,则每次更改下拉列表中的对象时都会触发page_load。
这一直是我项目中出现此类问题的原因。
答案 1 :(得分:0)
将下拉列表的AutoPostBack属性更改为true。检查错误是否仍然存在。
答案 2 :(得分:0)
我遇到了类似的问题。问题是你正在填写表格加载的第一个下拉列表,每次发生某些事件时它会加载表单我猜你没有保留更新面板所以它再次填满你的第一个下拉列表并导致选择的索引更改事件触发,这会使DropDownList1一次又一次地选择索引0。
public void bindLanguage() {
if(!Page.IsPostBack)
{
DropDownList1.DataSource = CreateDataSource();
DropDownList1.DataTextField = "language";
DropDownList1.DataValueField = "value";
DropDownList1.DataBind();
}
}
试试这个。
答案 3 :(得分:0)
将此代码 if(IsPostBack)返回; 添加到您的Page_Load方法。