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