使用DataGridView模拟Excel的计算汇总功能

 

使用DataGridView模拟Excel的计算汇总功能

效果如图1-3所示


1-3

partial Class Form1:Form

{

public Form1()

{

 InitializeComponent();

 m_Grid.SelectionMode=DataGridViewSelectionMode.RowHeaderSelect;

}

Private void Form1_Load(object sender,EventArgs e)

{

 ShowColumnHeader();

 AddRow();

}

Private void ShowColumnHeader()

{

 int start=(int)’A’;

   for(int i=0;i<26;i++)

{

 string colName=((char)(start+i)).ToString();

 m_Grid.Columns.Add(colName,colName);

//两个参数分别为columnName,ColumnHeader

m_Grid.Columns[i].SortMode=ColumnSortMode.NotSortable;

m_Grid.Columns[i].Width=75;

}

}

private void AddRow()

{

 for(int i=0;i<50;i++)

   {

     m_Grid.Rows.Add();

     }

}

//当向DataGridView中添加行数据时发生

private void OnRowsAdded(object sender,DataGridViewRowEventArgs e)

{

 m_Grid.Rows[e.RowIndex].HeaderCell.Value=e.RowIndex.ToString();

}

//用户点击列标题的时候,可以通过事件来模拟用户选中整个列

private void m_Grid_ColumnHeaderMouseClick(object sender,DataGridViewCellMouseEventArgs e)

{

 m_Grid.ClearSelection();

 foreach(DataGridViewRow row in m_Grid.Rows)

{

  row.Cell[e.ColumnIndex].Selected=true;

}

}

//用户点击获取计算功能

private void btnSum_Click(object sender,EventArgs e)

{

 DataGridViewCellCollection selCells=m_Grid.SelectedCells;

 if(selCells.Count<2)

 return;

 Dictionary<int,int> colSum=new Dictionary<int ,int>();

 Dictionary<int ,int> rowSum=new Dictionary<int,int>();

foreach(DataGridViewCell cell in selCells)

{

 if(!colSum.ContainsKeys(cell.columnIndex) )

 {

    if(cell.Value!=null && cell.Value.Tostring()!=string.Empty)

     {

                     colSum[cell.ColumnIndex]=int.Parse(cell.Value.ToString());

}

}

else

{

 if(cell.Value!=null && cell.Value.ToString()!=””)

 colSum[cell.ColumnIndex]+=int.Parse(cell.Value.ToString());

}

if(!rowSum.ContainsKeys(cell.RowIndex)

{

if(cell.Value!=null && cell.Value.ToString()!=””)

 rowSum[cell.RowIndex]=int.Parse(cell.Value.ToString());

}

else

 {

                if(cell.Value!=null && cell.Value.ToString()!=””)

 rowSum[cell.RowIndex]+=int.Parse(cell.Value.ToString());

}

}

//获取最大行数和列数

int maxRow=0;

foreach(int i in rowSum.Keys)

{

 if(i>maxRow)

 maxRow=i;

}

int maxCol=0;

foreach(int j in colSum.Keys)

{

 if(i>maxCol)

 maxCol=j;

}

//下面是计算如图1-4所示


1-4

if(rowSum.Keys.Count>=2)

{

 foreach(int colIndex in colSum.Keys)

 {

            m_Grid.Rows[maxRow+1].cell[collIndex].value=cloSum[colIndex];       

}

}

//下面是计算如图1-5所示


1-5

if(colSum.Keys.Count>=2)

 {

   foreach(int rowIndex in rowSum.Keys)

   {

                     m_Grid.Rows[rowIndex].Cells[maxCol+1].Value=rowSum[rowIndex];

}

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值