C# 使用Datasource从asp:CheckBoxList计算多个值的总和

C# 使用Datasource从asp:CheckBoxList计算多个值的总和,c#,asp.net,webforms,C#,Asp.net,Webforms,我有以下asp.net代码 <asp:DropDownList ID="cat_points_total" runat="server" DataSourceID="semester1" DataTextField="cats_points_total" DataValueField="cats_points_total" Visible="true"></asp:DropDownList> <asp:CheckBoxList ID="module_semes

我有以下asp.net代码

<asp:DropDownList ID="cat_points_total" runat="server" DataSourceID="semester1" 
DataTextField="cats_points_total" DataValueField="cats_points_total" 
Visible="true"></asp:DropDownList>

<asp:CheckBoxList ID="module_semester_1" runat="server" DataSourceID="semester1"
 DataTextField="module_name" DataValueField="cats_points"></asp:CheckBoxList>

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

<asp:Button ID="sem_1_cat" runat="server" Text="Test" OnClick="sem_1_cat_Click" />
目前,无论我在
复选框列表中做了多少选择,我都会得到
cattotal=120 catselected=20 catcalc=100的输出。

选择2个值的预期结果,每个值为20

cattotal =120 catselected =40 catcalc =100.

此时,除了计算CheckBoxList控件中的值的总数,所有操作似乎都正常工作。任何帮助都将不胜感激。

为什么要对值进行两次解析(即使用
Convert.ToInt32()
int.Parse()
)?只能用这样或那样的方式来做。无论如何,请将变量声明移出循环,并使用
+=
将其添加到
catselected
,否则您将用每个新循环覆盖以前的值

试试这个:

protected void sem_1_cat_Click(object sender, EventArgs e)
{
    int catselected = 0;

    for (int i = 0; i < module_semester_1.Items.Count; i++)
    {
        if (module_semester_1.Items[i].Selected)
        {
            string value = module_semester_1.Items[i].Value;
            catselected += int.Parse(value);
        }
    }
    int cattotal = int.Parse(cat_points_total.SelectedValue);
    int catcalc = cattotal - catselected;

    sem_1_fb.Visible = true;
    sem_1_fb.Text = "cattotal =" + cattotal + " catselected =" +
                    catselected + " catcalc =" + catcalc + ".";
}
protectedvoid sem\u 1\u cat\u Click(对象发送方,事件参数e)
{
int catselected=0;
对于(int i=0;i
感谢您的回答,我尝试了上述代码,但收到了使用未分配局部变量“catselected”的
错误?关于解析,我只是按照他们的教程进行的。cattotal不会更改,因此也可以在循环之外进行设置。您还可以设置一个布尔值,以确定是否选择了某个项目,这样您就可以将sem_1_fb.Visible和sem_1_fb.Text移出循环,这样就不会每次都设置它。您好,mcclosa,只需将int初始化为零。int catselected=0@德鲁:你说得对。我的注意力集中在所选的
。更新了我的答案。谢谢大家,完成了任务。
protected void sem_1_cat_Click(object sender, EventArgs e)
{
    int catselected = 0;

    for (int i = 0; i < module_semester_1.Items.Count; i++)
    {
        if (module_semester_1.Items[i].Selected)
        {
            string value = module_semester_1.Items[i].Value;
            catselected += int.Parse(value);
        }
    }
    int cattotal = int.Parse(cat_points_total.SelectedValue);
    int catcalc = cattotal - catselected;

    sem_1_fb.Visible = true;
    sem_1_fb.Text = "cattotal =" + cattotal + " catselected =" +
                    catselected + " catcalc =" + catcalc + ".";
}