【问题标题】:DataValueField didn't retrieve value ,although DataTextField retrievedDataValueField 没有检索到值,尽管 DataTextField 检索到
【发布时间】:2013-12-24 05:02:27
【问题描述】:

当我尝试使用 parse methodint.parse(DataValueField)在方法中使用下拉列表的DataValueField作为输入 int 参数时,它的值应该来自数据库,它给了我这个运行时错误

输入的字符串格式不正确

所以我调试了网站看看问题出在哪里我发现它没有检索到它的值 int itsSelectedIndexChangedmethod ,尽管下拉列表填写了Page_Loadmethod
这里是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."method"() 是一个存储过程

【问题讨论】:

  • 改用writerddl.SelectedValue
  • 嗯...看来我已经在使用它了!看 writer _writer = DS.select_writer_by_id(int.Parse(writerddl.DataValueField)).Single();
  • 但我会试试这个好不好
  • 成功了!大声笑,但我仍然不明白为什么 writerddl.DataValueField O.o

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


【解决方案1】:

在msdnDataValueField

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

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

  1. SelectedValue
  2. SelectedItem

【讨论】:

  • 啊哈,现在我知道问题出在哪里了,好的
【解决方案2】:

替换这个:

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.DataValueField 是字符串"writerid" 所以int.Parse 总是引发异常
  • SelectedItem 可以是null
【解决方案3】:

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

谢谢 帕尔瓦蒂

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-12
    • 1970-01-01
    • 2020-09-03
    • 2014-11-15
    相关资源
    最近更新 更多