DataGridView 添加统计行
文章有点潦草,不过应该看的懂,,,,
2种方式:
----------------------------------------------------------------------------------------------------------------------------------
方式一:(数据直接绑定)
缺点:列值运输的值 直接写死的,如果需要添加写列值,完全需要重写绑定下,就这点有些不好,暂时也就这样弄了;
这个希望多交流交流,,,
列头排序
添加两个事件,点击列头排序
定义集合 记录排序数
private List<object[]> list_obj = new List<object[]>();
//点击排序
private void dgvSubbill_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
if (e.RowIndex >= 0 || this.dgvSubbill.Rows.Count == 0)
return;
if (list_obj.Count == 0)
{
colindex = e.ColumnIndex;
int RowIndex = this.dgvSubbill.Rows.Count - 1;
list_obj.Add(((DataTable)dgvSubbill.DataSource).Rows[RowIndex].ItemArray);
this.dgvSubbill.Rows.Remove(dgvSubbill.Rows[this.dgvSubbill.Rows.Count - 1]); //移除
}
}
//排序后
string direction = "DESC";
private void dgvSubbill_Sorted(object sender, EventArgs e)
{
if (list_obj.Count == 0)
return;
if (this.dgvSubbill.Rows.Count > 0)
{
DataTable dt = ((DataTable)dgvSubbill.DataSource);
DataView View = dt.DefaultView;
if (direction == "ASC")
{
View.Sort = dt.Columns[colindex].ColumnName; //ASC DESC 默认升序
direction = "DESC";
}
else
{
View.Sort = dt.Columns[colindex].ColumnName + " " + "" + direction + ""; //DESC 降序
direction = "ASC";
}
dt = View.ToTable();
dt.Rows.Add(list_obj[0]);
list_obj.Clear();
dgvSubbill.DataSource = dt;
this.dgvSubbill.Rows[this.dgvSubbill.Rows.Count - 1].DefaultCellStyle.BackColor = Color.Cyan;
}
}
统计行:
dgvSubbill.DataSource = dtSubbill; //数据绑定
if (this.dgvSubbill.Rows.Count > 0)
{
for (int i = 0; i < this.dgvSubbill.Rows.Count; i++)
{
//运算 列值……
}
}
//添加合计行(追加绑定行)
int RowIndex = this.dgvSubbill.Rows.Count;
DataRow dr = ((DataTable)dgvSubbill.DataSource).NewRow();
dr[0] = ""; dr[7] = ""; dr[8] = ""; dr[9] = "";
………………
………………
((DataTable)dgvSubbill.DataSource).Rows.Add(dr);
this.dgvSubbill.Rows[RowIndex].DefaultCellStyle.BackColor = Color.Cyan; //合计行颜色
------------------------------------------------------------------------------------------------------------------------------------------------------------------
方式二:
手动绑定
private List<DataGridViewRow> list_row = new List<DataGridViewRow>();
//合计行
DataGridViewRow dgv_row = new DataGridViewRow();
object[] objs = { "合计", "", "", dgv_TotalCharge, dgv_CostPackingList, dgv_TransportCost,""};
dgv_row.CreateCells(this.dgvbsn_Subbill, objs);
dgv_row.DefaultCellStyle.BackColor = Color.Cyan;
dgvbsn_Subbill.Rows.Add(dgv_row);
//排序后发生
private void dgvbsn_Subbill_Sorted(object sender, EventArgs e)
{
if (this.dgvbsn_Subbill.Rows.Count > 0)
{
this.dgvbsn_Subbill.Rows.Add(list_row[0]);
this.list_row.Clear();
}
}
//用户点击时发生
private void dgvbsn_Subbill_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
if (e.RowIndex >= 0 || this.dgvbsn_Subbill.Rows.Count == 0)
return;
if (list_row.Count <= 0)
{
int RowIndex = this.dgvbsn_Subbill.Rows.Count - 1;
list_row.Add(this.dgvbsn_Subbill.Rows[RowIndex]);
this.dgvbsn_Subbill.Rows.RemoveAt(RowIndex);
}
}
-------------------------------------------------------------------------------------------------------------------------------------------
//其他操作选择统计行之后的阻止(或 批量处理) int RowIndex = dgvSubbill.Rows.Count - 2;
int RowsCount = this.dgvSubbill.SelectedRows[0].Index - 1;
if (RowsCount == RowIndex)
return;