DropDownList中值不能改变,求助!

Momo 2011-08-16 09:21:43
1.问题描述:
1)在Default.aspx页中用GridView + SqlDataSource取出表student中的数据,并且启用“选定内容”;
表student结构:
sno(主键) nvarchar(10) --学生学号
name nvarchar(50) --学生姓名
sex nchar(10) --学生性别
age smallint --学生年龄
2)在Default.aspx页的GridView下,用一个HyperLink控件转到编辑页面EditStudentInfo.aspx,其Text格式为“编辑学生 xxx”,NavigateUrl格式为“EditStudentInfo.aspx?sno=xxxx”;
3)在EditStudentInfo.aspx页面中,含有一些Label和TextBox,以及一个DropDownList,用来编辑(更新)学生信息,其中DropDownList用来显示和选择学生性别;
3)在EditStudentInfo.aspx.cs里,创建数据库连接,用SQL命令取出sno为特定值的学生的信息;
string sno = Request.Params["sno"].ToString();
string querySql = "SELECT [name], [sex], [age] FROM [student] WHERE [sno]=" + sno;

之后将对应信息存到相应TextBox和DropDownList中;
ddlSex.Text = reader.getString(1)

4)好,到这里问题来了:无论在GridView中选择的那一行学生信息,其性别是男还是女,在转到编辑页面时,性别(DropDownList的值)总显示为“男”,搞不懂原因啊。。。5)我甚至在编辑页面中添加了一个Label1用来测试从数据库中取出的sex字段的值
Label1.Text = reader.GetString(1);

结果Label1可以显示正确的性别 - -|||
2.程序截图
1)Default.aspx页面

2)EditStudentInfo.aspx页面

最下面那个“女”就是Label1的值
3.程序代码
1)EditStudentInfo.aspx页面
<body>
<form id="form1" runat="server">
<div>

<asp:Label ID="lblSno" runat="server" Text="学生学号"></asp:Label>
<asp:TextBox ID="txtSno" runat="server"></asp:TextBox>
<br />
<asp:Label ID="lblName" runat="server" Text="学生姓名"></asp:Label>
<asp:TextBox ID="txtName" runat="server"></asp:TextBox>
<br />
<asp:Label ID="lblSex" runat="server" Text="学生性别"></asp:Label>
<asp:DropDownList ID="ddlSex" runat="server" Width="128px">
<asp:ListItem>男</asp:ListItem>
<asp:ListItem>女</asp:ListItem>
</asp:DropDownList>
<br />
<asp:Label ID="lblAge" runat="server" Text="学生年龄"></asp:Label>
<asp:TextBox ID="txtAge" runat="server"></asp:TextBox>
<br />
<asp:Button ID="btnSave" runat="server" Text="保存" />
<asp:Button ID="btnCancel" runat="server" Text="取消" />

<br />
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>

</div>
</form>
</body>

2)EditStudentInfo.aspx.cs代码文件
public partial class EditStudentInfo : System.Web.UI.Page
{
SqlConnection conn = null;

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
string connString = ConfigurationManager.ConnectionStrings["testConnectionString1"].ConnectionString;
conn = new SqlConnection(connString);
string sno = Request.Params["sno"].ToString();

try
{
conn.Open();
string querySql = "SELECT [name], [sex], [age] FROM [student] WHERE [sno]=" + sno;
SqlCommand queryCmd = new SqlCommand(querySql, conn);
SqlDataReader reader = queryCmd.ExecuteReader();
while (reader.Read())
{
txtSno.Text = sno;
txtName.Text = reader.GetString(0);
Label1.Text = reader.GetString(1);
ddlSex.Text = reader.GetString(1);
txtAge.Text = reader.GetInt16(2).ToString();
}
}
catch (SqlException sqle1)
{
Console.WriteLine(sqle1.Message);
}
}
}
}
...全文
195 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
Momo 2011-08-18
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 dgcxyc 的回复:]

引用 11 楼 hrxmomo 的回复:
引用 9 楼 hrxmomo 的回复:
引用 6 楼 dgcxyc 的回复:

你试一下这个:
ddlSex.SelectedItem.Text=reader.GetString(1);

哈哈,成功了!!

不过这位大哥可不可以给解释一下原因呐,因为我之前在另一个项目里也是用的DropDownList的Text属性就可以,偏偏这回就不……
[/Quote]
恩,对的,我就是加了一个Trim()搞定了~
Momo 2011-08-18
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 dgcxyc 的回复:]

引用 11 楼 hrxmomo 的回复:
引用 9 楼 hrxmomo 的回复:
引用 6 楼 dgcxyc 的回复:

你试一下这个:
ddlSex.SelectedItem.Text=reader.GetString(1);

哈哈,成功了!!

不过这位大哥可不可以给解释一下原因呐,因为我之前在另一个项目里也是用的DropDownList的Text属性就可以,偏偏这回就不……
[/Quote]
恩,对的,我就是加了一个Trim()搞定了 O(∩_∩)O~
dgcxyc 2011-08-16
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 hrxmomo 的回复:]
引用 9 楼 hrxmomo 的回复:
引用 6 楼 dgcxyc 的回复:

你试一下这个:
ddlSex.SelectedItem.Text=reader.GetString(1);

哈哈,成功了!!

不过这位大哥可不可以给解释一下原因呐,因为我之前在另一个项目里也是用的DropDownList的Text属性就可以,偏偏这回就不行了,苦恼的很%>_<%

对了,这个貌似……
[/Quote]

嗯,是哦.这样就是说把它的值给改变了.
那可以这样把.
那就是用楼上的说的,进行循环判断,找出匹配的

foreach (ListItem item in ddlSex.Items)
{
if (item.Text == "根据Id来读取的男女")
{
item.Selected = true;
break;
}
}

按道理这样是可以的.
你是不是应该这样:item.Text==reader.GetString(1).Trim().toString();

Momo 2011-08-16
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 hrxmomo 的回复:]
引用 6 楼 dgcxyc 的回复:

你试一下这个:
ddlSex.SelectedItem.Text=reader.GetString(1);

哈哈,成功了!!

不过这位大哥可不可以给解释一下原因呐,因为我之前在另一个项目里也是用的DropDownList的Text属性就可以,偏偏这回就不行了,苦恼的很%>_<%
[/Quote]
对了,这个貌似也有点小问题,因为这样会将值为“男”的ListItem的文本改变掉,比如说待编辑的学生性别字段为女时,ddlSex的两个ListItem的文本都变成“女”了
Momo 2011-08-16
  • 打赏
  • 举报
回复
O(∩_∩)O哈哈哈~终于想通啦~~~说来与大家分享一下,也可以给遇到同样问题的朋友一个提醒
1)在这个表定义中,我将sex字段定义为nchar(10),根据nchar的含义,所以该字段里存着的实际值其实是:
“男 _ _ _ _ _ _ _ _ _”或“女 _ _ _ _ _ _ _ _ _”(用_代表一个空格)这样的话,reader.GetString(1)读出来实际上是“男”或“女”后边跟着9个空格这样的一个字符串,而我ddlSex的所有ListItem中都没有值和这两个字符串相比配的项,所以赋值无效,ddlSex每次都只能自动选择第一个ListItem的值,就是“男”,所以说无论男女它都会显示男啦~
2)在另一个也用同样方法实现的项目中,我的sex字段用的是nvarchar(10),所以该字段里存着的是“男”或“女”,难怪乎这个项目里用同样的办法会成功

找到原因的感觉真爽啊,豁然开朗,感谢所有朋友的帮忙,结贴~
Momo 2011-08-16
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 dgcxyc 的回复:]

你试一下这个:
ddlSex.SelectedItem.Text=reader.GetString(1);
[/Quote]
哈哈,成功了!!

不过这位大哥可不可以给解释一下原因呐,因为我之前在另一个项目里也是用的DropDownList的Text属性就可以,偏偏这回就不行了,苦恼的很%>_<%
Riverwcj 2011-08-16
  • 打赏
  • 举报
回复
ddlSex.SelectedText==reader.GetString(1);
应该这样写
Momo 2011-08-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zhou_xuexi 的回复:]

ddlSex.SelectedText==reader.GetString(1);或者ddlSex.SelectedValue==reader.GetString(1)试试
[/Quote]
额,没有SelectedText属性呢;用SelectedValue和Text属性的效果一样,不过还是多谢啦~~
dgcxyc 2011-08-16
  • 打赏
  • 举报
回复
你试一下这个:
ddlSex.SelectedItem.Text=reader.GetString(1);
zhou_xuexi 2011-08-16
  • 打赏
  • 举报
回复
ddlSex.SelectedText==reader.GetString(1);或者ddlSex.SelectedValue==reader.GetString(1)试试
Momo 2011-08-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 chen846262292 的回复:]

在EditStudentInfo页面的后台写下:
C# code
foreach (ListItem item in ddlSex.Items)
{
if (item.Text == "根据Id来读取的男女")
{
item.Selected = true;
br……
[/Quote]
O(∩_∩)O谢谢,刚刚试过,不过还是不行呐。。。天啊
quifar123 2011-08-16
  • 打赏
  • 举报
回复
在EditStudentInfo页面的后台写下:
 foreach (ListItem item in ddlSex.Items)
{
if (item.Text == "根据Id来读取的男女")
{
item.Selected = true;
break;
}
}

在Page_load用
Momo 2011-08-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 qydvip 的回复:]

ddlSex.Text = reader.GetString(1);

这样也行?
[/Quote]
对啊,这样和ddlSex.SelectedValue = reader.GetString(1);的效果一样
qydvip 2011-08-16
  • 打赏
  • 举报
回复
ddlSex.Text = reader.GetString(1);

这样也行?

62,026

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧