DropDownList,CheckBoxList之类的SelectedIndexChanged奇怪现象.
Posted on 2006-02-19 03:09 P.Dragon 阅读(729) 评论(0) 收藏 举报最近用DropDownList和CheckBox出现了一些奇怪的现象。他们在跟DataView绑定之后,获取他们的值不能得到预期的结果。
先说说CheckBox的。
正常判断CheckBox是否被选中,用Checked属性。假如CheckBox控件为CheckBox1,放入一个Button1控件。
protected void Button1_Click(object sender, EventArgs e)2
{3
if (CheckBox1.Checked)4
{5
Response.Write("被选中");6
}7
else8
{9
Response.Write("没被选中");10
}11
}测试结果完成没有问题。
现在我把CheckBox放到Repeater控件里面。
<form id="form1" runat="server">
<asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>
<asp:CheckBox ID="CheckBox1" runat="server" Text=<%# DataBinder.Eval(Container, "ID")%>
/>
</ItemTemplate>
</asp:Repeater>
</form>
然后对Repeater进行绑定。
在页面放两个按钮进行测试全选和获取选中的CheckBox的值。
全选按钮代码如下:
protected void Button1_Click1(object sender, EventArgs e)
{
if (btnSelectAll.Text == "全选")
{
for (int i = 0; i < Repeater1.Items.Count; i++)
{
CheckBox checkbox;
checkbox = (CheckBox)Repeater1.Items[i].FindControl("CheckBox1");
checkbox.Checked = true;
}
btnSelectAll.Text = "全消";
}
else
{
for (int i = 0; i < Repeater1.Items.Count; i++)
{
CheckBox checkbox;
checkbox = (CheckBox)Repeater1.Items[i].FindControl("CheckBox1");
checkbox.Checked = false;
}
btnSelectAll.Text = "全选";
}
}
测试结果也正常。
然后就是测试获取选中的CheckBox的值。代码如下:
protected void Button2_Click(object sender, EventArgs e)
{
for (int i = 0; i < Repeater1.Items.Count; i++)
{
CheckBox checkbox;
checkbox = (CheckBox)Repeater1.Items[i].FindControl("CheckBox1");
if (checkbox.Checked)
{
Response.Write(checkbox.Text);
}
}
}
结果无论选多少个,都不能Response.Write出任何东西,倒是一开始初始化时候把CheckBox的Checked设置为true,则无论如何选,都全部输入所有的CheckBox的值。
不知道是何故........
然后就是DropDownList的问题。
也是通过跟DataView绑定。通过SelectedIndexChanged想获取选定项的Text,结果都是获得第一次选的项的Text。后来改为不用绑定的方式。代码如下:
if (!IsPostBack)
{
strSQL = "Select * From Dept";
SqlCommand cmd = new SqlCommand(strSQL, conn);
using (SqlDataReader dr = cmd.ExecuteReader())
{
while (dr.Read())
{
ListItem li = new ListItem(dr["Dept"].ToString(), dr["ID"].ToString());
ddlDept.Items.Add(li);
}
}
}
就完全没有问题拉。
这类的控件遇到跟数据库绑定时就出现这种问题,不知道是什么原因???

浙公网安备 33010602011771号