P.Dragon的开发历程

//Code for fun!Code for yourself!
  博客园  :: 首页  :: 新随笔  :: 订阅 订阅  :: 管理

DropDownList,CheckBoxList之类的SelectedIndexChanged奇怪现象.

Posted on 2006-02-19 03:09  P.Dragon  阅读(729)  评论(0)    收藏  举报

最近用DropDownList和CheckBox出现了一些奇怪的现象。他们在跟DataView绑定之后,获取他们的值不能得到预期的结果。
先说说CheckBox的。
正常判断CheckBox是否被选中,用Checked属性。假如CheckBox控件为CheckBox1,放入一个Button1控件。

 1protected void Button1_Click(object sender, EventArgs e)
 2    {
 3        if (CheckBox1.Checked)
 4        {
 5            Response.Write("被选中");
 6        }

 7        else
 8        {
 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);
                }
            }
        }

就完全没有问题拉。

这类的控件遇到跟数据库绑定时就出现这种问题,不知道是什么原因???