c# 非绑定datagridview控件利用label控件汇总
刚入门,自己写了一个datagridview控件利用label控件显示在datagridview控件下方的汇总方法
/// <summary>
/// 添加汇总的laleb控件;
/// </summary>
/// <param name="需汇总的列名临时表"></param>
/// <param name="需汇总的datagridview控件"></param>
/// <param name="所在窗体"></param>
public void labeladd(DataTable field, DataGridView dgv, Form fm)
{
int x = dgv.Location.X;//获取DataGridView控件的X坐标;
int y = dgv.Location.Y;//获取DataGridView控件的Y坐标;
int h = dgv.Size.Height;//获取DataGridView控件的高度;
//先添加合计的控件
Label lblsum = new Label();//实例化Label控件;
lblsum.Name = "lblsum";//设置控件名称为lbl;
lblsum.Text = "合计";//设置text值;
lblsum.TextAlign = ContentAlignment.MiddleRight;//设置靠右对齐;
lblsum.Font = new Font(lblsum.Font.Name ,9 ,FontStyle.Bold);//设置字体,大小,加粗;
lblsum.AutoSize = false;//不允许控件自定义大小;
lblsum.Size = new Size(72, 23);//定义大小
lblsum.Location = new Point(x, y + h + 3);//设定位置;
fm.Controls.Add(lblsum);//添加控件;
for (int i = 0; i < field.Rows .Count; i++)//循环需汇总的列名数组
{
int lbly = y + h + 3;//设定label汇总控件的初始Y坐标;
int lblx = x + dgv.RowHeadersWidth;//设定label汇总控件的初始X坐标(dgv.RowHeadersWidth为行号宽度);
Label lbl = new Label();//实例化Label控件;
lbl.Name = "lbl" + field.Rows [i][0].ToString();//设置控件名称为lbl+需汇总的列名;
lbl.Text = lbl.Name.ToString();//设置初始text值=Name;
lbl.TextAlign = ContentAlignment.MiddleRight;//设置靠右对齐;
lbl.Font = new Font(lblsum.Font.Name, 9, FontStyle.Bold);//设置字体,大小,加粗;
lbl.AutoSize = false;//不允许控件自定义大小;
lbl.Size = new Size(72, 23);//定义初始化大小
lbl.Location = new Point(150, y + h + 2);//先初始化位置;
fm.Controls.Add(lbl);//添加控件;
for (int j = 0; j < dgv.Columns.Count; j++)
{
if (dgv.Columns[j].Visible == true)//判断j列是否显示;
{
if (dgv.Columns[j].Name.ToString() == field.Rows [i][0].ToString())//如果列名称与汇总字段相同
{
fm.Controls["lbl" + field.Rows[i][0].ToString()].Location = new Point(lblx, lbly);//设定位置
fm.Controls["lbl" + field.Rows[i][0].ToString()].Size = new Size(dgv.Columns[j].Width, 23);//设定汇总label控件宽度
}
else
{
lblx += dgv.Columns[j].Width;//
}
}
}
}
}
/// <summary>
/// datagridview控件汇总方法;
/// </summary>
/// <param name="需汇总的字段"></param>
/// <param name="需汇总的datagridview控件"></param>
public void sumdata(DataTable field, DataGridView DetailDataGrid, Form fm)
{
for (int i = 0; i < field.Rows.Count; i++)
{
field.Rows[i][1] = 0;//初始化金额为0
}
for (int i = 0; i < DetailDataGrid.Rows.Count; i++)
{
for (int j = 0; j < field.Rows .Count ; j++)
{
field.Rows [j][1] =decimal .Parse ( field.Rows[j][1] .ToString ())+ decimal.Parse(DetailDataGrid.Rows[i].Cells[ field.Rows[j][0].ToString()].Value.ToString());//汇总列累加
fm.Controls["lbl" + field.Rows[j][0].ToString().ToString()].Text = field.Rows[j][1].ToString();//设置控件text属性;
}
}
}
private void FmSalesInvoice_Load(object sender, EventArgs e)//窗体加载时定义汇总临时表;
{
DataTable field =new DataTable ("tbfieldSum");//实例化需汇总的临时表;
field .Columns .Add("fieldname", typeof(String));//添加列;
field.Columns.Add("fieldsum", typeof(decimal));//添加汇总列;
field.Rows.Add("sum1", 0);//添加datagridview控件需汇总的列名称作为临时表的行、初始化汇总金额为0;
field.Rows.Add("sum2", 0);//添加datagridview控件需汇总的列名称作为临时表的行、初始化汇总金额为0;
field.Rows.Add("sum3", 0);//添加datagridview控件需汇总的列名称作为临时表的行、初始化汇总金额为0;
labeladd(field,datagridview1 , this );//调用添加汇总的laleb控件方法;
sumdata(field, datagridview1, this);//调用datagridview控件汇总方法
}
private void datagridview1_Scroll(object sender, ScrollEventArgs e)//滚动条引发事件;
{
if (e.ScrollOrientation == ScrollOrientation.HorizontalScroll)//判断是否横向滚动条;
{
for (int i = 0; i < field.Rows .Count ; i++)
{
Controls["lbl" + field.Rows[i][0].ToString()].Left -= (e.NewValue - e.OldValue);//设置控件随滚动条显示;
}
}
}