如何用CheckBox选中GridView中的多行,然后对所选行中的值进行计算?
假如学生的成绩表,选择多门课后,然后计算这些课相应成绩的总分数为什么我将CheckBox数据绑定之后,即使选中后,仍然无法计算,程序调试出的结果判断出CheckBox.C...
假如学生的成绩表,选择多门课后,然后计算这些课相应成绩的总分数
为什么我将CheckBox数据绑定之后,即使选中后,仍然无法计算,程序调试出的结果判断出CheckBox.Checked==false,不得知 展开
为什么我将CheckBox数据绑定之后,即使选中后,仍然无法计算,程序调试出的结果判断出CheckBox.Checked==false,不得知 展开
5个回答
2015-08-08
展开全部
参考如下:
根据CheckBox选中的行取值:
for (int i = 0; i < this.GridView1.Rows.Count; i++)
{
CheckBox ckb = (CheckBox)this.GridView1.Rows[i].Cells[0].FindControl("CheckBox1");
if (ckb.Checked)
{
huohao =Convert.ToInt32(this.GridView1.Rows[i].Cells[2].Text);
shuliang = Convert.ToInt32(this.GridView1.Rows[i].Cells[3].Text);
danjia =Convert.ToDecimal(this.GridView1.Rows[i].Cells[4].Text);
heJiJinE =Convert.ToDecimal(this.GridView1.Rows[i].Cells[5].Text);
jinhuoId =Convert.ToInt32(this.GridView1.Rows[i].Cells[7].Text);
}
}
计算数总数:
在Gridview的RowDataBound事件中:
string kucunNum = this.DropDownList1.SelectedItem.Text;
if (e.Row.RowType == DataControlRowType.DataRow)
{
DataRowView row = e.Row.DataItem as DataRowView;
if (!DBNull.Value.Equals(row["JinHuoShuliang"]))//注意DBNull
{
shopNumber += Convert.ToInt32(row["JinHuoShuliang"]);
}
}
if (e.Row.RowType == DataControlRowType.Footer)
{
e.Row.Cells.RemoveAt(3);
e.Row.Cells.RemoveAt(2);
e.Row.Cells[1].ColumnSpan = 3;
e.Row.Cells[1].HorizontalAlign = HorizontalAlign.Right;
e.Row.Cells[1].Text = kucunNum + "的库存量是:" + shopNumber.ToString();
}
根据CheckBox选中的行取值:
for (int i = 0; i < this.GridView1.Rows.Count; i++)
{
CheckBox ckb = (CheckBox)this.GridView1.Rows[i].Cells[0].FindControl("CheckBox1");
if (ckb.Checked)
{
huohao =Convert.ToInt32(this.GridView1.Rows[i].Cells[2].Text);
shuliang = Convert.ToInt32(this.GridView1.Rows[i].Cells[3].Text);
danjia =Convert.ToDecimal(this.GridView1.Rows[i].Cells[4].Text);
heJiJinE =Convert.ToDecimal(this.GridView1.Rows[i].Cells[5].Text);
jinhuoId =Convert.ToInt32(this.GridView1.Rows[i].Cells[7].Text);
}
}
计算数总数:
在Gridview的RowDataBound事件中:
string kucunNum = this.DropDownList1.SelectedItem.Text;
if (e.Row.RowType == DataControlRowType.DataRow)
{
DataRowView row = e.Row.DataItem as DataRowView;
if (!DBNull.Value.Equals(row["JinHuoShuliang"]))//注意DBNull
{
shopNumber += Convert.ToInt32(row["JinHuoShuliang"]);
}
}
if (e.Row.RowType == DataControlRowType.Footer)
{
e.Row.Cells.RemoveAt(3);
e.Row.Cells.RemoveAt(2);
e.Row.Cells[1].ColumnSpan = 3;
e.Row.Cells[1].HorizontalAlign = HorizontalAlign.Right;
e.Row.Cells[1].Text = kucunNum + "的库存量是:" + shopNumber.ToString();
}
展开全部
计算分数的时候 是点击按钮吧 那你看一下我的代码:
protected void btnCommit_Click(object sender, EventArgs e)
{
double numScore = 0;
for (int i = 0; i < GridView1.Rows.Count; i++)
{
//如果某一行的CheckBox被选中,则执行统计操作
CheckBox chk = (CheckBox)(GridView1.Rows[i].Cells[0].FindControl("chkItem"));
if (chk.Checked == true)
{
Label lblScore = (Label) (GridView1.Rows[i].Cell[0].FindContorl("lblScore"));
numScore +=Convert.toDouble(lblScore.Text);
}
}
}
protected void btnCommit_Click(object sender, EventArgs e)
{
double numScore = 0;
for (int i = 0; i < GridView1.Rows.Count; i++)
{
//如果某一行的CheckBox被选中,则执行统计操作
CheckBox chk = (CheckBox)(GridView1.Rows[i].Cells[0].FindControl("chkItem"));
if (chk.Checked == true)
{
Label lblScore = (Label) (GridView1.Rows[i].Cell[0].FindContorl("lblScore"));
numScore +=Convert.toDouble(lblScore.Text);
}
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你先看看你能不能得到你绑定的这个checkbox控件,我感觉你多数得不到这个控件
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2011-07-27
展开全部
我想我解决你的问题了:
在你的事件里,
取((CheckBox)sender).Parent.Parent会取到你的控件所在的那一行。再转换一下
(GridViewRow)((CheckBox)sender).Parent.Parent)就得到了那个GridViewRow对象,之后取RowIndex什么的就随你意了。
——————————————————
你的e是普通的EventArg,当然不可能有e.RowIndex属性。
有两种方法。
一种是不用取当前行的索引值,直接用CheckBox2_CheckedChanged方法中的参数sender。
(CheckBox)sender就是将sender转化为一个CheckBox对象,你做相应判断就可以了。
另外一种要麻烦些。
你写一个循环,对GridView里面的每一行中的((CheckBox)GridView1.Rows[i].FindControl("checkbox1")).Checked进行判断。
但这两种方法你都仍然无法判断触发事件的是哪一行。
另外,虚机团上产品团购,超级便宜
在你的事件里,
取((CheckBox)sender).Parent.Parent会取到你的控件所在的那一行。再转换一下
(GridViewRow)((CheckBox)sender).Parent.Parent)就得到了那个GridViewRow对象,之后取RowIndex什么的就随你意了。
——————————————————
你的e是普通的EventArg,当然不可能有e.RowIndex属性。
有两种方法。
一种是不用取当前行的索引值,直接用CheckBox2_CheckedChanged方法中的参数sender。
(CheckBox)sender就是将sender转化为一个CheckBox对象,你做相应判断就可以了。
另外一种要麻烦些。
你写一个循环,对GridView里面的每一行中的((CheckBox)GridView1.Rows[i].FindControl("checkbox1")).Checked进行判断。
但这两种方法你都仍然无法判断触发事件的是哪一行。
另外,虚机团上产品团购,超级便宜
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
请帖代码
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询