GridView的数据行的行合并,GridView实现合计数据项

本文介绍了一个员工保险管理系统的设计与实现过程,包括使用ASP.NET进行前端界面布局、数据验证及表格展示,通过GridView实现了数据行合并及列合计等功能。
以下是页面的HTML代码:
<%@ Page Language="C#" AutoEventWireup="true" StylesheetTheme="Default" Theme="Default"
    CodeFile
="InsuranceList.aspx.cs" Inherits="Employee_InsuranceList" 
%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    
<title>员工保险信息</title>
</head>
<body>
    
<form id="form1" runat="server">
        
<fieldset>
            
<legend>员工保险管理</legend>
            
<div id="tabsF">
                
<ul>
                    
<li><href="AddInsurance.aspx" title="添加员工保险"><span>添加员工保险</span></a></li>
                    
<li><href="../Default.aspx" title="返回主页面"><span>返回</span></a></li>
                
</ul>
            
</div>
        
</fieldset>
        
<fieldset>
            
<legend>保险信息</legend>开始年份:<asp:TextBox ID="txtBDate" runat="server" />
            
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="txtBDate"
                ErrorMessage
="开始年份不能为空" Display="Dynamic">*</asp:RequiredFieldValidator>
            
<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ControlToValidate="txtBDate"
                Display
="Dynamic" ErrorMessage="开始年份格式不正确" ValidationExpression="^[0-9]*[1-9][0-9]*$">*</asp:RegularExpressionValidator>结束年份:
            
<asp:TextBox ID="txtEndDate" runat="server"></asp:TextBox>
            
<asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ControlToValidate="txtEndDate"
                ErrorMessage
="结束年份不能为空" Display="Dynamic">*</asp:RequiredFieldValidator>
            
<asp:RegularExpressionValidator ID="RegularExpressionValidator2" runat="server" ControlToValidate="txtEndDate"
                Display
="Dynamic" ErrorMessage="结束年份格式不正确" ValidationExpression="^[0-9]*[1-9][0-9]*$">*</asp:RegularExpressionValidator>
            
<asp:CompareValidator ID="CompareValidator1" runat="server" ControlToCompare="txtEndDate"
                ControlToValidate
="txtBDate" ErrorMessage="开始年份不能大于结束年份" Operator="LessThanEqual"
                Type
="Integer" Display="Dynamic">*</asp:CompareValidator>
            
<asp:Button ID="btnSel" runat="server" Text="开始查询" OnClick="btnSel_Click" />
            
<asp:GridView ID="gvInsurance" runat="server" SkinID="Default_GridView"  AutoGenerateColumns="False"
                OnDataBound
="gvInsurance_DataBound" OnRowDataBound="gvInsurance_RowDataBound" CaptionAlign="Left" OnRowDeleting="gvInsurance_RowDeleting" OnRowEditing="gvInsurance_RowEditing" ShowFooter="True">
                
<Columns>
                    
<asp:BoundField DataField="ComName" HeaderText="公司名称" />
                    
<asp:BoundField DataField="DepartName" HeaderText="部门名称" />
                    
<asp:BoundField DataField="EmpName" HeaderText="员工姓名" />
                    
<asp:BoundField DataField="InsYear" HeaderText="保险年度" />
                    
<asp:BoundField DataField="Endowment" DataFormatString="{0:C}" HeaderText="养老保险"
                        HtmlEncode
="False">
                        
<ItemStyle HorizontalAlign="Right" />
                    
</asp:BoundField>
                    
<asp:BoundField DataField="Medicare" DataFormatString="{0:C}" HeaderText="医疗保险" HtmlEncode="False">
                        
<ItemStyle HorizontalAlign="Right" />
                    
</asp:BoundField>
                    
<asp:BoundField DataField="Unemployed" DataFormatString="{0:C}" HeaderText="失业保险"
                        HtmlEncode
="False">
                        
<ItemStyle HorizontalAlign="Right" />
                    
</asp:BoundField>
                    
<asp:BoundField DataField="Fund" DataFormatString="{0:C}" HeaderText="公积金" HtmlEncode="False">
                        
<ItemStyle HorizontalAlign="Right" />
                    
</asp:BoundField>
                    
<asp:BoundField DataField="EmpCode" HeaderText="员工编号" />
                    
<asp:CommandField ShowEditButton="True" />
                    
<asp:CommandField ShowDeleteButton="True" />
                
</Columns>
            
</asp:GridView>
        
</fieldset>
        
<asp:ValidationSummary ID="ValidationSummary1" runat="server" ShowMessageBox="True"
            ShowSummary
="False" />
    
</form>
</body>
</html>

 实现数据行合并是在GridView的DataBind事件进行书写:
代码如下:

protected void gvInsurance_DataBound(object sender, EventArgs e)
    
{
        GroupRows(
this.gvInsurance, 0);
        GroupRows(
this.gvInsurance, 1);
    }

    
public static void GroupRows(GridView GridView1, int cellNum)
    
{
        
int i = 0, rowSpanNum = 1;
        
while (i < GridView1.Rows.Count - 1)
        
{
            GridViewRow gvr 
= GridView1.Rows[i];
            
for (++i; i < GridView1.Rows.Count; i++)
            
{
                GridViewRow gvrNext 
= GridView1.Rows[i];
                
if (gvr.Cells[cellNum].Text == gvrNext.Cells[cellNum].Text)
                
{
                    gvrNext.Cells[cellNum].Visible 
= false;
                    rowSpanNum
++;
                }

                
else
                
{
                    gvr.Cells[cellNum].RowSpan 
= rowSpanNum;
                    rowSpanNum 
= 1;
                    
break;
                }


                
if (i == GridView1.Rows.Count - 1)
                
{
                    gvr.Cells[cellNum].RowSpan 
= rowSpanNum;
                }

            }

        }

    }
书写实现数据列合计是在RowDataBind事件里面进行书写,代码如下:
protected void gvInsurance_RowDataBound(object sender, GridViewRowEventArgs e)
    
{
        
if (e.Row.RowType == DataControlRowType.DataRow)
        
{
            e.Row.Attributes.Add(
"onmouseover""e=this.style.backgroundColor; this.style.backgroundColor='linen'");
            e.Row.Attributes.Add(
"onmouseout""this.style.backgroundColor=e");
        }

        
//sum info
        if (e.Row.RowType == DataControlRowType.Footer)
        
{
            
//unite cell
            e.Row.Cells[0].ColumnSpan = 11;
            
//visual 10 cell 
            for (int i = 1; i < 11; i++)
            
{
                e.Row.Cells[i].Visible 
= false;
            }

            
//get every unite cell value
            TableCell cellEndowment = e.Row.Cells[4];
            TableCell cellMedicare 
= e.Row.Cells[5];
            TableCell cellUnemployed
=e.Row.Cells[6];
            TableCell cellFund
=e.Row.Cells[7];
            TableCell cellSum 
= e.Row.Cells[8];
            
//define variable
            double endowment,medicare,unemployee,fund;
            
//set value
            endowment= GetSum(4);
            medicare
=GetSum(5);
            unemployee
=GetSum(6);
            fund
=GetSum(7);
            
//response string
            e.Row.Cells[0].Text="养老保险合计:" + String.Format("{0:C}",endowment)+
                
" 医疗保险合计:" + String.Format("{0:C}", medicare)+
                
" 失业保险合计:" + string.Format("{0:C}",unemployee)+
                
" 公积金合计:" + string.Format("{0:C}",fund)+
                
" 总计:"+string.Format("{0:C}",this.GetSum(endowment,medicare,unemployee,fund));

        }

    }

注:设置GridView的DataSource时,根据你欲合并数据行的列进行排序。
附1: 

/// <summary>
    
/// get sum 
    
/// </summary>
    
/// <param name="i">column id</param>
    
/// <returns>sum value</returns>

    private double GetSum(int i)
    
{
        
//define variable
        double sum = 0;
        
foreach (GridViewRow row in this.gvInsurance.Rows)
        
{
            sum 
+= Convert.ToDouble(string.Format("{0:2F}",row.Cells[i].Text.Remove(0,1)));
            
        }

        
return sum;
    }

    
/// <summary>
    
/// get all sum
    
/// </summary>
    
/// <param name="endowment">养老保险</param>
    
/// <param name="medicare">医疗保险</param>
    
/// <param name="unemployee">失业保险</param>
    
/// <param name="fund">公积金</param>
    
/// <returns>sum</returns>

    private double GetSum(double endowment,double medicare,double unemployee,double fund)
    
{
        
return endowment+medicare+unemployee+fund;
    }
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值