private void dropBind() //绑定下拉列表
{
1 dropId.Items.Clear();
2 string strSql = "select * from AClass";
3 DataSet dsA = SqlBase.ExecuteSqlDataSet(strSql);
4 dropId.DataSource = dsA.Tables[0].DefaultView;
5 dropId.DataBind();
6 dropId.Items.Add(new ListItem("所有类型", "0"));
7 dropId.SelectedValue = "0";
} 设断点
调试时从第1句往下执行到第7句时Items里有[0] 摄像机
[1] 电脑
[2] 所有类型
但是点继续的时候又跳到第1句执行到第5句,此时查看Items里已是null值。然后就会报如下错误:
“dropId”有一个无效 SelectedValue,因为它不在项目列表中。参数名: value
{
1 dropId.Items.Clear();
2 string strSql = "select * from AClass";
3 DataSet dsA = SqlBase.ExecuteSqlDataSet(strSql);
4 dropId.DataSource = dsA.Tables[0].DefaultView;
5 dropId.DataBind();
6 dropId.Items.Add(new ListItem("所有类型", "0"));
7 dropId.SelectedValue = "0";
} 设断点
调试时从第1句往下执行到第7句时Items里有[0] 摄像机
[1] 电脑
[2] 所有类型
但是点继续的时候又跳到第1句执行到第5句,此时查看Items里已是null值。然后就会报如下错误:
“dropId”有一个无效 SelectedValue,因为它不在项目列表中。参数名: value
你还有什么调用dropBind它了吗?
@haozi678 xiaolei1982 我只在下面调用了它:
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
ViewState["ClassA"] = "";
dropBind();
}
}
有判断也不应该出这种现象呀
private void dropBind() //绑定下拉列表
{
dropId.Items.Clear();
string strSql = "select * from AClass";
DataSet dsA = SqlBase.ExecuteSqlDataSet(strSql);
if(dsA.Tables[0].Rows.Count>0)
{
dropId.Items.Add(new ListItem("请选择",0);
for(int i=0;i<dsA.Tables[0].Rows.Count;i++)
{
DataRow dRow = dsA.Tables[0].Rows[i];
string txt = dRow["文字列"].ToString();
string txtID = dRow["文字列ID"].ToString();
dropId.Items.Add(new ListItem(txt,txtID));
}
}
dropId.SelectedIndex=0;
}
dsA.Tables[0].Rows.insertat应该省事吧
private void dropBind() //绑定下拉列表
{
dropId.Items.Clear();
string strSql = "select * from AClass";
DataSet dsA = SqlBase.ExecuteSqlDataSet(strSql);
dropId.DataSource = dsA.Tables[0].DefaultView;
dropId.DataBind();
dropId.Items.Insert(0, new ListItem("所有类型", "0")); //直接把这个插入到第一条,就不用再改变选中项了
}
{
if (!this.IsPostBack)
{
ViewState["ClassA"] = "";
dropBind();
}
6 dropId.Items.Add(new ListItem("所有类型", "0"));
7 dropId.SelectedValue = "0";
}private void dropBind() //绑定下拉列表
{
1 dropId.Items.Clear();
2 string strSql = "select * from AClass";
3 DataSet dsA = SqlBase.ExecuteSqlDataSet(strSql);
4 dropId.DataSource = dsA.Tables[0].DefaultView;
5 dropId.DataBind(); }
{
dropId.Items.Clear();
string strSql = "select * from AClass";
DataSet dsA = SqlBase.ExecuteSqlDataSet(strSql);
dropId.DataSource = dsA.Tables[0].DefaultView;
dropId.DataValueField = "你要绑定的值字段";
dropId.DataTextField = "你要显示的字段";
dropId.DataBind();
dropId.Items.Insert(0, new ListItem("所有类型", "0"));
dropId.Items.FindByValue("0").Selected = true;
}
dropId.Items.Clear();
string strSql = "select * from AClass";
DataSet dsA = SqlBase.ExecuteSqlDataSet(strSql);
DataRow dr = dsA.Tables[0].NewRow();
dsA.Tables[0].Rows.InsertAt(dr, 0);
dropId.DataSource = dsA.Tables[0].DefaultView;
dropId.DataBind();
这样多好,就是不知道能不能解决问题
此代码运行正常。但是还是执行两遍。仔细看了下在onselectchange事件里果真有操作。但是我删除此事件发现代码依旧执行两遍。不知为何?
{
dropId.Items.Clear();
string strSql = "select * from AClass";
DataSet dsA = SqlBase.ExecuteSqlDataSet(strSql);
dropId.DataSource = dsA.Tables[0].DefaultView;
dropId.DataTextField = "文字字段";
dropId.DataValueField = "值字段";
dropId.DataBind(); dropId.Items.Add(new ListItem("所有类型", "0"));
//加上
dropId.ClearSelection();
dropId.Items.FindByValue("0").Selected = true;
//去掉 dropId.SelectedValue = "0";
}
dropId.Items.Clear();
string strSql = "select * from AClass";
DataSet dsA = SqlBase.ExecuteSqlDataSet(strSql);
DataRow dr = dsA.Tables[0].NewRow();
dr[0]="所有类型";
dsA.Tables[0].Rows.InsertAt(dr, 0);
dropId.DataSource = dsA.Tables[0].DefaultView;
dropId.DataBind();这样就可以了
private void dropBind() //绑定下拉列表
{
1 dropId.Items.Clear();
2 string strSql = "select * from AClass";
3 DataSet dsA = SqlBase.ExecuteSqlDataSet(strSql);
4 dropId.DataSource = dsA.Tables[0].DefaultView;
dropId.DataText="你要显示的字段文本";
5 dropId.DataValue="真实的值";
dropId.DataBind();
dropId.Items.Insert(0, new ListItem("所有类型", "0")); //默认就是选择第一个,不大需要再去选择第一个
}
比如:我在HTML(News.aspx)中加入一个<div id="Div1" runat="server"></div>
在后台我这样声明protected HtmlGenericControl Div1;一个变量与之对应,但运行的时候报错:“News”已经包含“Div1”的定义。把"Div1"换成其它变量名又报错“未能将对象的引用设置到对象的实例”我记得以前这样做可以正常运行啊,无语///
{
CommonBLL comBLL = new CommonBLL();
this.ddlField.DataSource = comBLL.GetObjectField(type);//GetObjectField返回datatable。
ddlField.DataTextField = "Text";
ddlField.DataValueField = "Name";
this.ddlField.DataBind();
}
我的项目中这样实现.........
{
if (!this.IsPostBack)
{
ViewState["ClassA"] = "";
dropBind();
}
}AutoPostBack=true;
这样,也不会运行多次,建议你跟踪下IsPostBack的值,如果是IsPostBack的值出现问题,看看有没有其他的一些事件触发了.
实在没有,就只能这样写了:if (!this.IsPostBack&&dropId.Items.Count==0)
{
ViewState["ClassA"] = "";
dropBind();
} 不过还是觉得你得找出根源来比较好.
我也曾经郁闷很久
我的估计是 value 为 0 的items有多个
如果有多个之后不符合selected只有一个的规定.
抱错也抱,
我为了图省事,一直用的SelectedIndex