虽然DataTextField已检索,但DataValueField未检索值

时间:2013-12-24 05:02:28

标签: c# asp.net linq-to-sql

当我尝试使用我的下拉列表的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。“方法”()是一个存储过程

3 个答案:

答案 0 :(得分:1)

替换它:

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();

答案 1 :(得分:1)

在msdn DataValueField

  

使用此属性指定包含列表控件中每个项的值的字段。

所以它只是属性名称,而不是值。要获得选定的值,您需要使用

  1. SelectedValue
  2. SelectedItem

答案 2 :(得分:1)

要从下拉列表中选择所选值,您应该使用writerddl.SelectedValue而不是writerddl.DataValueField

由于 帕瓦蒂