要实现
根据列的宽度 改变宽度
可以根据列的位置变换(手动拖动列,改变顺序) 而变换位置
总是在最低层(重新排序后)

解决方案 »

  1.   

    上网去下一个 Developer Express 这个就可以了
      

  2.   

    public void TotalRow(DataGridView dg)
      {
      dg.Rows.Add();
      DataGridViewRow dgr = dg.Rows[dg.Rows.Count - 1];
      dgr.ReadOnly = true;
      dgr.DefaultCellStyle.BackColor = System.Drawing.Color.Khaki;
      dgr.Cells[0].Value = "合计";
      for (int i = 0; i < dg.Rows.Count - 1; i++)
      {
      dgr.Cells[3].Value = Convert.ToSingle(dgr.Cells[3].Value) + Convert.ToSingle(dg.Rows[i].Cells[3].Value);
      }
      }
      

  3.   


    //给数据源添加合计行,数据源中加了合计行,DataGridView中绑定之后,也会有相应的合计行
    public static void SumDataTable(DataTable dt,String columnNames)
            {
                if (dt == null || dt.Rows.Count == 0)
                {
                    return;
                }
                Decimal[] decArray = new Decimal[dt.Columns.Count];
                int[] flagArray = new int[dt.Columns.Count];
                bool flag = false;
                for (int i = 0; i < decArray.Length; i++)
                {
                    decArray[i] = 0;
                }
                for (int i = 0; i < dt.Columns.Count; i++)
                {
                    flagArray[i] = 0;
                    if (dt.Columns[i].DataType == System.Type.GetType("System.Decimal")
                        || dt.Columns[i].DataType == System.Type.GetType("System.Double")
                        || dt.Columns[i].DataType == System.Type.GetType("System.Int32")
                        )
                    {
                        if (columnNames == null)
                        {
                            flagArray[i] = 1;
                        }
                        else
                        {
                            flagArray[i] = columnNames.IndexOf(dt.Columns[i].ColumnName) >= 0 ? 1 : 0;
                        }                }
                    if (!flag && dt.Columns[i].DataType == System.Type.GetType("System.String"))
                    {
                        flagArray[i] = -1;
                        flag = true;
                    }
                    if ((dt.Columns[i].ColumnName == "Year") 
                        || (dt.Columns[i].ColumnName == "Month"))
                    {
                        flagArray[i] = 0;
                    }
                }
                foreach (DataRow dr in dt.Rows)
                {
                    for (int i = 0; i < flagArray.Length; i++)
                    {
                        if (flagArray[i] == 1)
                        {
                            decArray[i] += MyConvert.toDecimal((dr[i]is DBNull)?"0": dr[i].ToString());                    }
                    }
                }
                DataRow drSum = dt.NewRow();
                for (int i = 0; i < flagArray.Length; i++)
                {
                    if (flagArray[i] == -1)
                    {
                        drSum[i] = "<合计>";
                    }
                    if (flagArray[i] == 1)
                    {
                        drSum[i] = decArray[i];
                    }
                }
                dt.Rows.Add(drSum);
            }
      

  4.   


    当然这个方法有待简化和优化,只是提供一个思路。这种方法支持所有数字列的自动求和总计。
    另外是换数据控件,用第三方控件来实现汇总行的显示。如Janas控件中GridEX