问题描述
现想利用GridView进行自动统计,并在页脚把结果显示出来。我的想法是先设两个变量:x,y然后通过if语句判断,如果GridView中特定的那列(如cell[4])的文字==“按时”,则x自增1,如果文字==“延期”,则y自增1。最后统计结果。思路是有了,但具体的代码怎么写小弟不是非常清楚,因为自己刚学不久,请大家帮忙把上面思路的代码写一下,特别是那个if语句该怎么写,谢谢!!
解决方案
解决方案二:
请大家帮帮忙吧,小弟只有这么点分了,不要嫌少哈!
解决方案三:
在ROWDATABOUND事件里统计编写,看看MSDN关于此事件的介绍。
解决方案四:
intx=0;inty=0;protectedvoidGridView1_RowCreated(objectsender,GridViewRowEventArgse){switch(e.Row.Cells[4].Text){case"按时":x+=1;break;case"延期":y+=1;break;default:break;}}
解决方案五:
谢谢shoushii!!但我运行后出现如下错误:“指定的参数已超出有效值的范围。参数名:index”这是为什么呢??
解决方案六:
应该写在ROWDATABOUND事件里,因为ROWCREATED事件,此时数据还没加载强烈建议你看看MSDNROWDATABOUND
解决方案七:
谢谢only-endure!!但我是写在RowDataBound里的呀。把我的代码粘贴如下:intx=0;inty=0;protectedvoidGridView1_RowDataBound(objectsender,GridViewRowEventArgse){switch(e.Row.Cells[4].Text){case"按时完工":x+=1;break;case"延期完工":y+=1;break;default:break;}//自动统计if(e.Row.RowType==DataControlRowType.Footer){floatf=((float)(x+y)/GridView1.Rows.Count)*100;Stringstr=String.Format("{0:f1}",f);e.Row.Cells[3].Text=str+"%";e.Row.Cells[5].Text=x.ToString();e.Row.Cells[7].Text=y.ToString();}}
解决方案八:
现在是这样的情况:如果照shoushii的方法,代码如下:intx=0;inty=0;protectedvoidGridView1_RowCreated(objectsender,GridViewRowEventArgse){switch(e.Row.Cells[4].Text){case"按时完工":x+=1;break;case"延期完工":y+=1;break;default:break;}}protectedvoidGridView1_RowDataBound(objectsender,GridViewRowEventArgse){//自动统计if(e.Row.RowType==DataControlRowType.Footer){floatf=((float)(x+y)/GridView1.Rows.Count)*100;Stringstr=String.Format("{0:f1}",f);e.Row.Cells[3].Text=str+"%";e.Row.Cells[5].Text=x.ToString();e.Row.Cells[7].Text=y.ToString();}
出现的结果是x,y没有自增,在最后的统计结果中仍然是0.若照only-endure的方法,代码已在上面,出现的结果是“指定的参数已超出有效值的范围。参数名:index”这是为什么呢??
解决方案九:
还要判断行的类型。看看MSDNif(e.Row.RowType==DataControlRowType.DataRow){switch(e.Row.Cells[4].Text){case"按时完工":x+=1;break;case"延期完工":y+=1;break;default:break;}晕,我不是说过了么,这些数据的东西都放在ROWDATABOUND事件中。。。。。。。。。。。。。
解决方案十:
请原来我的无知吧!5555,现在时间紧,看MSDN有点没头绪的感觉。请“提刑官”再帮帮忙吧。我把代码修改如下,但统计结果还是为0,没有变化啊。是不是那个switch(e.Row.Cells[4].Text)语句有问题?我的那列用的是Label控件,SQL数据库中的格式为nvarchar,这有关系吗??盼复,谢谢!!intx=0;inty=0;protectedvoidGridView1_RowDataBound(objectsender,GridViewRowEventArgse){if(e.Row.RowType==DataControlRowType.DataRow){//自动统计switch(e.Row.Cells[4].Text){case"按时完工":x+=1;break;case"延期完工":y+=1;break;default:break;}}elseif(e.Row.RowType==DataControlRowType.Footer){floatf=((float)(x+y)/GridView1.Rows.Count)*100;Stringstr=String.Format("{0:f1}",f);e.Row.Cells[3].Text=str+"%";e.Row.Cells[5].Text=x.ToString();e.Row.Cells[7].Text=y.ToString();}}
解决方案十一:
也有可能是你的列错了,索引改一改试试。索引是从零开始数起的。第一列是0,第二列是1。。。
解决方案十二:
跟踪一下,看看整个流程。
解决方案十三:
加个trim试下intx=0;inty=0;protectedvoidGridView1_RowDataBound(objectsender,GridViewRowEventArgse){if(e.Row.RowType==DataControlRowType.DataRow){//自动统计//kenupdateswitch(e.Row.Cells[4].Text.Trim()){case"按时完工":x+=1;break;case"延期完工":y+=1;break;default:break;}}if(e.Row.RowType==DataControlRowType.Footer){floatf=((float)(x+y)/GridView1.Rows.Count)*100;Stringstr=String.Format("{0:f1}",f);e.Row.Cells[3].Text=str+"%";e.Row.Cells[5].Text=x.ToString();e.Row.Cells[7].Text=y.ToString();}}