在ASP.net中更改了CheckBox处理oncheck

时间:2012-12-07 15:05:37

标签: asp.net checkbox event-handling

我有一个DataList视图,我在项目模板中添加了一个复选框

我希望我选择的每个项目都会在检查后增加一些计数器。 我使用以下代码来处理它,但从不访问事件函数?!

    protected void selectItemCheckBox_CheckedChanged(object sender, EventArgs e)
    {        
    int selected = 0;
    foreach (DataListItem i in DataList1.Items)
    {
        CheckBox chk = (CheckBox)i.FindControl("selectItemCheckBox");
        if (chk.Checked)
        {

            selected++;
        }
        selectedItemCount.Text = Convert.ToString(selected);
        }`
     }

1 个答案:

答案 0 :(得分:0)

目前,您正在循环查看每个已选中复选框的每个复选框,这对于效率低下而且取决于您的其他代码,可能会造成麻烦。

最好分别为每个复选框递增。

...DataList...
<ItemTemplate>
    <asp:CheckBox id="selectItemCheckBox" runat="server"
        AutoPostBack="True"
        OnCheckedChanged="selectItemCheckBox_CheckedChanged" />
</ItemTemplate>
...DataList...

选中复选框后,使用发件人

更新该复选框的总计
protected void selectItemCheckBox_CheckedChanged(object sender, EventArgs e)
{
    // Parse the total selected items from the TextBox.
    // You may consider using a Label instead, or something non-editable like a hidden field
    int totalChecked;
    if (int.TryParse(selectedItemCount.Text, out totalChecked) = false)
        totalChecked = 0;

    // Get a reference to the CheckBox
    CheckBox selectItemCheckBox = (CheckBox)sender;

    // Increment the total
    if (selectItemCheckBox.Checked == true)
        totalChecked++;

    // Put back in the TextBox
    selectedItemCount.Text = totalChecked.ToString();
}