当我尝试使用我的下拉列表的DataValueField
作为方法中的输入 int 参数时,通过使用解析方法int.parse(DataValueField)
因为它的值应该来自数据库,它给了我这个运行时错误
输入字符串格式不正确
所以我调试了网站,看看问题在哪里,我发现它没有通过SelectedIndexChanged
方法检索它的值,尽管下拉列表是在Page_Load
方法
中填写的这是page_load方法:
protected void Page_Load(object sender, EventArgs e)
{
writerddl.DataSource = DS.show_all_writers();
writerddl.DataValueField = "writerid";
writerddl.DataTextField = "writersname:;
writerddl.DataBind(); }
这是 SelectedIndexChanged 方法:
protected void writerddl_SelectedIndexChanged(object sender, EventArgs e)
{
writer _writer = DS.select_writer_by_id(int.Parse(writerddl.DataValueField)).Single();
usernametxt.Text = _writer.username;
passwordtxt.Text = _writer.password;
nametxt.Text = _writer.writersname;
}
请注意,我使用的是LinQtoSql,所以DS。方法"() 是一个存储过程
In msdn DataValueField
使用此属性可以指定包含列表控件中每个项的值的字段。
所以它只是属性名称,而不是值。要获取您需要使用的选定值
- 选定值
- 选定项
替换这个:
writer _writer = DS.select_writer_by_id(int.Parse(writerddl.DataValueField)).Single();
跟:
int i = int.Parse(writerddl.SelectedItem.Value);
writer _writer = DS.select_writer_by_id(i).Single();
要从下拉列表中选择所选值,应使用 writerddl。SelectedValue 而不是 writerddl。数据值字段
谢谢帕尔瓦蒂