剛入門,自己寫了一個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);//設定控制元件隨滾動條顯示;
}
}
}
uj5u.com熱心網友回復:
嗯 挺好的。。請說出你的 問題。。。繼續努力 寫的不錯。。。有不會的你可以問、;uj5u.com熱心網友回復:
嗯 挺好的。。轉載請註明出處,本文鏈接:https://www.uj5u.com/net/119042.html
標籤:C#
