C# GridView中DropDownList值的总和
希望有人能帮我解决这个问题。我有一个x行的GridView,每行有4列,包括3个DropDownList和一个标签,用于保存3个DropDownList的选定值之和。我的问题是如何做到这一点?我尝试了DropDownList的SelectedIndexChanged路线,但没有得到想要的结果。这些值不是被添加,而是被下一个选择覆盖。我做错了什么?以下是我目前掌握的情况:C# GridView中DropDownList值的总和,c#,asp.net,gridview,C#,Asp.net,Gridview,希望有人能帮我解决这个问题。我有一个x行的GridView,每行有4列,包括3个DropDownList和一个标签,用于保存3个DropDownList的选定值之和。我的问题是如何做到这一点?我尝试了DropDownList的SelectedIndexChanged路线,但没有得到想要的结果。这些值不是被添加,而是被下一个选择覆盖。我做错了什么?以下是我目前掌握的情况: protected void ddlSelectedIndexChanged(object sender, Even
protected void ddlSelectedIndexChanged(object sender, EventArgs e)
{
foreach (GridViewRow row in gvStuRoster.Rows)
{
double scores = 0;
DropDownList ddlFocus = (DropDownList)row.FindControl("ddlFocus");
DropDownList ddlEvidence = (DropDownList)row.FindControl("ddlEvidence");
DropDownList ddlConventions = (DropDownList)row.FindControl("ddlConventions");
//DropDownList ddlScores = (DropDownList)row.FindControl("ddlScores");
Label lblScores = (Label)row.FindControl("lblScores");
if (ddlFocus.SelectedIndex > 0 && ddlFocus.SelectedValue != "-1")
{
scores += Convert.ToDouble(ddlFocus.SelectedValue);
}
else if (ddlFocus.SelectedValue == "-1")
{
scores = -1;
}
if (ddlEvidence.SelectedIndex > 0 && ddlEvidence.SelectedValue != "-1")
{
scores += Convert.ToDouble(ddlEvidence.SelectedValue);
}
else if (ddlEvidence.SelectedValue == "-1")
{
scores = -1;
}
if (ddlConventions.SelectedIndex > 0 && ddlConventions.SelectedValue != "-1")
{
scores += Convert.ToDouble(ddlConventions.SelectedValue);
}
else if (ddlConventions.SelectedValue == "-1")
{
scores = -1;
}
lblScores.Text = scores == -1 ? "" : Convert.ToString(scores);
}
}
更新
在将分数
和lblScores
标签移到内部后,除第一次选择任何DropDownList(同一行中的一个除外)时,GridView中的所有其他标签值均设置为0外,所有其他标签均按预期工作。为什么会这样
提前感谢您的帮助 您的
得分
变量在每次请求时(每次更改下拉列表)都重置为0。然后,您只需将分数设置为当前更改下拉列表的值。如果下拉列表中有选择项,则可以获取每个请求的每个下拉列表的值。假设每个下拉列表的第一项都设置为“选择值”或其他内容,则可以检查SelectedIndex
是否大于0,如果大于0,则表示存在选择
foreach (GridViewRow row in gvStuRoster.Rows)
{
double scores = 0;
DropDownList ddlFocus = (DropDownList)row.FindControl("ddlFocus");
DropDownList ddlEvidence = (DropDownList)row.FindControl("ddlEvidence");
DropDownList ddlConventions = (DropDownList)row.FindControl("ddlConventions");
Label lblScores = (Label)row.FindControl("lblScores");
if (ddlFocus.SelectedIndex > 0)
{
scores += Convert.ToDouble(ddlFocus.SelectedValue);
}
if (ddlEvidence.SelectedIndex > 0)
{
scores += Convert.ToDouble(ddlEvidence.SelectedValue);
}
if (ddlConventions.SelectedIndex > 0)
{
scores += Convert.ToDouble(ddlConventions.SelectedValue);
}
lblScores.Text = scores == 0 ? "" : Convert.ToString(scores);
}
在戴夫的帮助下,我得到了我想要的结果。以下是我的最终代码:
protected void ddlSelectedIndexChanged(object sender, EventArgs e)
{
foreach (GridViewRow row in gvStuRoster.Rows)
{
double scores = 0;
DropDownList ddlFocus = (DropDownList)row.FindControl("ddlFocus");
DropDownList ddlEvidence = (DropDownList)row.FindControl("ddlEvidence");
DropDownList ddlConventions = (DropDownList)row.FindControl("ddlConventions");
DropDownList ddlScores = (DropDownList)row.FindControl("ddlScores");
Label lblScores = (Label)row.FindControl("lblScores");
if (ddlFocus.SelectedIndex > 0 && ddlFocus.SelectedValue != "-1")
{
scores += Convert.ToDouble(ddlFocus.SelectedValue);
}
if (ddlEvidence.SelectedIndex > 0 && ddlEvidence.SelectedValue != "-1")
{
scores += Convert.ToDouble(ddlEvidence.SelectedValue);
}
if (ddlConventions.SelectedIndex > 0 && ddlConventions.SelectedValue != "-1")
{
scores += Convert.ToDouble(ddlConventions.SelectedValue);
}
ddlScores.SelectedValue = scores == 0 ? "" : Convert.ToString(scores);
}
}
再次感谢你,戴夫 戴夫,现在我遇到了另一个问题。看起来score变量在整个网格中都是持久的。第一行的总计将添加到第二行的总计中。您需要在循环内移动scores
变量,并在循环内设置lblTeacher
。我编辑了我的答案来展示这一点。lblTeacher
声明在哪里?Dave,lblTeacher
是一个标签,它位于我用于测试目的的GridView之外。实际上,分数总和应该设置为第4列中的标签。我将更新我的OP以反映这一点……在循环中移动scores
变量后,无论我选择什么,我都会返回一个零值。我已根据您的更新更新了我的答案。如果您在循环中设置lblScores.Text
,它应该可以正常工作。如果没有,设置一个断点,并在逐步完成代码时检查分数值。我在OP中添加了一个更新部分,说明代码更新后的情况。