日期:2014-05-18  浏览次数:20411 次

dropdownlist中DataValueField的问题
if (!IsPostBack)
 { ........
  string sql = "select 学号,姓名 from STU";

  OracleDataAdapter dataAdapter = new OracleDataAdapter(sql, conn);
  DataSet ds = new DataSet();
  dataAdapter.Fill(ds);

  ddl1.DataSource = dspcs.Tables[0];
  ddl1.DataTextField = "姓名";
  ddl1.DataValueField = "学号";
   
  ddlLgmc.DataBind();
  ddlLgmc.Items.Insert(0, "-------全部-------");

}

然后我在别的地方使用ddl1.SelectedItem.Value.ToString()取到的是DataTextField的值,不是DataValueField中的值,如果我把ddl1.DataTextField = "姓名"这句话注释掉,下拉菜单中出现的就是学号

我的想法是说ddl1.DataValueField就相当于下面代码中的ListItem Value,DataTextField就相当于里面的人名,不知道理解的对不对
<asp:DropDownList ID="ddl1" runat="server" CssClass="ddlList">
  <asp:ListItem Value ="">----------全部----------</asp:ListItem>
  <asp:ListItem Value ="1">战三</asp:ListItem>
  <asp:ListItem Value ="2">李四</asp:ListItem>
  <asp:ListItem Value ="3">王武</asp:ListItem>
</asp:DropDownList>


最后再说下问题:使用ddl1.SelectedItem.Value.ToString()取到的是DataTextField的值,不是DataValueField中的值

------解决方案--------------------
理解的很对
 使用选择的值 ddl1.SelectedValue
------解决方案--------------------
不對吧
Value ddl1.SelectedItem.Value;
Text ddl1.SelectedItem.Text
------解决方案--------------------
我的想法是说ddl1.DataValueField就相当于下面代码中的ListItem Value,DataTextField就相当于里面的人名,不知道理解的对不对 

这个理解是正确的。但是ddl1.SelectedItem.Value.ToString()取到的是DataValueField的值,ddl1.SelectedItem.Test.ToString()取到的才是DataTextField 的值。看名称就知道。

我怀疑你第一个例子的SQL中的学号和姓名是不是写错位了,才会造成。另外建议不要使用中文字段名
------解决方案--------------------
同意楼上

------解决方案--------------------
选择学号的时候,最好还是用ddl.SelectedValue.
------解决方案--------------------
ddl1.SelectedItem.Text --->取得到绑定在"DataTextField"字段值;
ddl1.SelectedItem.Value --->取得到绑定在"DataValueField"字段值;
------解决方案--------------------
参考与DropdownList相关:
http://download.csdn.net/source/204080
http://download.csdn.net/source/331627
http://download.csdn.net/source/282546
http://download.csdn.net/source/213243
http://download.csdn.net/source/203958

------解决方案--------------------
你应该先查查联机帮助,好好看看selectItem到底是什么意思,这里我帮你查了:

获取列表控件中索引最小的选定项。
命名空间: System.Web.UI.WebControls
程序集: System.Web(在 system.web.dll 中)


看见了吗?

无论你用value还是text,你去到的都不会是你想要的值,它只能取index=0的文本或值,你对ListItem的理解是正确的。

一帮情况,如果你希望得到的是下拉列表中的Value的话,无论选哪项,直接用SelectValue属性就可以,

如果你希望取到的是下拉列表中的文本,除非你的Value和Text内容相同的时候可以用SelectValue属性,

否则要用Item属性,这个属性返回的是一个ListItemCollection集合,要用index索引值指定你要的值,所以还要用SelectIndex属性,这个属性会返回当前你选择项目的索引值。

可以这样写

string itemStr = null;

//这样就取出了你选中项的文本,也可以把Text改成Value来取值,不过取值用SelectValue比较好
itemStr = this.DropDownList1.Item[this.DropDownList1.SelectIndex].Text;

写个小循环取多个

using System.Collection;
...........

ArrayList al = new ArrayList();

foreach(ListItem li in DropDownList1.Item)
{
if(li.Text != String.Empty)
{
al.Add(li.Text);
}