以下是页面的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
><
a
href
="AddInsurance.aspx"
title
="添加员工保险"
><
span
>
添加员工保险
</
span
></
a
></
li
>
<
li
><
a
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
>
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));

}
}
/**/
/// <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;
}




































































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



















































































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
































