联系我们 更多>>
  • 地址:西安经济技术开发区中环大厦A座18F-A
  • 电话:029-83765753
  • Q Q:374676511
当前位置:首页 >> ASP.NET >> 正文

datagridview中添加合计行

来源:本站 时间:2010-05-11 点击:

把下面  

 #region 添加DataGridView底行合计数

和  
#endregion  添加DataGridView底行合计数
之间的 代码拷贝到你的程序中

然后再 给要计算合计的 DataGridView 对象(此处假定为dataGridView1) 绑定 下面的方法及 数据表  则可:

这里假设通过点击 按钮 之后 绑定

private void button1_Click(object sender, EventArgs e)
  {

     dataGridView1.DataSourceChanged += new EventHandler(dataGridView_DataSourceChanged);
   dataGridView1.ColumnHeaderMouseClick += new DataGridViewCellMouseEventHandler(dataGridView_ColumnHeaderMouseClick);
   dataGridView1.CellValueChanged += new DataGridViewCellEventHandler(dataGridView_CellValueChanged);
   dataGridView1.AllowUserToAddRows = false;
   dataGridView1.DataSource = 这里是要绑定的数据表;

  }

#region 添加DataGridView底行合计数

        /// <summary>
        /// 计算合计算
        /// </summary>
        /// <param >要计算的DataGridView</param>
        private void SumDataGridView(DataGridView dgv)
        {

            #region 计算合计数
            //DataGridView dgv = (DataGridView)sender;
            if (dgv.DataSource == null) return;
            DataTable dt = (DataTable)dgv.DataSource;
            if (dt.Rows.Count < 1) return;
            decimal[] tal = new decimal[dt.Columns.Count];

            DataRow ndr = dt.NewRow();

            string talc = "";

            int number = 1;
            foreach (DataRow dr in dt.Rows)
            {
                dr["@Kzk"] = number++;
                int n = 0;
                foreach (DataColumn dc in dt.Columns)
                {


                    if (talc == "" && dc.DataType.Name.ToUpper().IndexOf("STRING") >= 0) talc = dc.ColumnName;


                    if (dc.DataType.IsValueType)
                    {
                        string hej = dr[dc.ColumnName].ToString();
                        try
                        {
                            if (hej != string.Empty) tal[n] += decimal.Parse(hej);
                        }
                        catch (Exception) { }
                        //if (hej != string.Empty) tal[n] += decimal.Parse(hej);
                    }
                    n++;
                }
            }

            ndr.BeginEdit();
            for (int i = 0; i < dt.Columns.Count; i++)
            {
                if (tal[i] != 0)
                    ndr[i] = tal[i];
            }
            ndr["@Kzk"] = ((int)(dt.Rows.Count + 1)).ToString();
            if (talc != "") ndr[talc] = "[合计]";
            ndr.EndEdit();
            dt.Rows.Add(ndr);

            dgv.Rows[dgv.Rows.Count - 1].DefaultCellStyle.BackColor = Color.FromArgb(255, 255, 210);
            if (dgv.Tag == null)
            {
                foreach (DataGridViewColumn dgvc in dgv.Columns)
                {
                    dgvc.SortMode = DataGridViewColumnSortMode.Programmatic;
                }
            }
            dgv.Tag = ndr;
            #endregion
        }

        private void dgvConsumeList_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {//
            //直接拷贝代码

            DataGridView sortDgv = (DataGridView)sender;
            int fx = 0;
            if (sortDgv.AccessibleDescription == null)
            {
                fx = 1;
            }
            else
            {
                fx = int.Parse(sortDgv.AccessibleDescription);
                fx = (fx == 0 ? 1 : 0);
            }
            sortDgv.AccessibleDescription = fx.ToString();
            if (sortDgv.Columns[e.ColumnIndex].Name == "@Kzk") return;
            DataGridViewColumn nCol = sortDgv.Columns[e.ColumnIndex];

            if (nCol.DataPropertyName == string.Empty) return;

            if (nCol != null)
            {
                sortDgv.Sort(nCol, fx == 0 ? ListSortDirection.Ascending : ListSortDirection.Descending);

            }
            //--
            DataRow dr = (DataRow)sortDgv.Tag;
            DataTable dt = (DataTable)sortDgv.DataSource;
            DataRow ndr = dt.NewRow();
            ndr.BeginEdit();
            for (int i = 0; i < dt.Columns.Count; i++)
            {
                ndr[i] = dr[i];
            }
            dt.Rows.Remove(dr);


            //if (e.ColumnIndex != 0)
            {
                int n = 1;
                for (int i = 0; i < sortDgv.Rows.Count; i++)
                {
                    DataGridViewRow dgRow = sortDgv.Rows[i];
                    DataRowView drv = (DataRowView)dgRow.DataBoundItem;
                    DataRow tdr = drv.Row;
                    tdr.BeginEdit();
                    tdr["@Kzk"] = n;
                    n++;
                    tdr.EndEdit();

                }
                sortDgv.Refresh();
                sortDgv.RefreshEdit();

            }
            ndr["@Kzk"] = ((int)(dt.Rows.Count + 1)).ToString();
            ndr.EndEdit();
            dt.Rows.Add(ndr);
            sortDgv.Tag = ndr;

            //--
            sortDgv.Sort(sortDgv.Columns["@Kzk"], ListSortDirection.Ascending);
            sortDgv.Columns["@Kzk"].HeaderCell.SortGlyphDirection = SortOrder.None;
            nCol.HeaderCell.SortGlyphDirection = fx == 0 ? SortOrder.Ascending : SortOrder.Descending;
            sortDgv.Rows[sortDgv.Rows.Count - 1].DefaultCellStyle.BackColor = Color.FromArgb(255, 255, 210);

        }
        private void dgvConsumeList_DataSourceChanged(object sender, EventArgs e)
        {
            DataGridView dgv = (DataGridView)sender;
            DataTable dt = (DataTable)dgv.DataSource;
            if (dt == null) return;
            decimal[] tal = new decimal[dt.Columns.Count];
            if (dt.Columns.IndexOf("@Kzk") < 0)
            {
                DataColumn dc = new DataColumn("@Kzk", System.Type.GetType("System.Int32"));
                dt.Columns.Add(dc);
                dgv.Columns["@Kzk"].DisplayIndex = 0;
                dgv.Columns["@Kzk"].HeaderText = "序号";

                dgv.Columns["@Kzk"].SortMode = DataGridViewColumnSortMode.Programmatic;
                dgv.AutoResizeColumn(dgv.Columns["@Kzk"].Index);

                dgv.Columns["@Kzk"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
            }
            SumDataGridView(dgv);
        }
        private void dgvConsumeList_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {//
            DataGridView dgv = (DataGridView)sender;
            if (dgv.Tag == null || e.RowIndex < 0 || e.RowIndex == dgv.Rows.Count - 1) return;

            string col = dgv.Columns[e.ColumnIndex].DataPropertyName;
            if (col == string.Empty) return;
            if (((DataRowView)dgv.Rows[e.RowIndex].DataBoundItem).Row.Table.Columns[col].DataType.IsValueType)
            {
                decimal tal = 0;
                foreach (DataGridViewRow dgvr in dgv.Rows)
                {
                    if (dgvr.Index != dgv.Rows.Count - 1)
                    {
                        string hej = dgvr.Cells[e.ColumnIndex].Value.ToString();
                        if (hej != string.Empty) tal += decimal.Parse(hej);
                    }
                }
                if (tal == 0)
                    dgv[e.ColumnIndex, dgv.Rows.Count - 1].Value = DBNull.Value;
                else
                    dgv[e.ColumnIndex, dgv.Rows.Count - 1].Value = tal;
            }
        }

  #endregion  添加DataGridView底行合计数