加入客户端的js代码,实现这些功能,在onblur里实现计算,并对总和列赋值.就你目前所讲的,没法写代码给你

解决方案 »

  1.   

    直接在SQL计算好然后用C#输出
    string sql="select ,价格,数量,价格*数量 as 总值"
      

  2.   

    打错
    string   sql="select 价格,数量,价格*数量   as   总值"
      

  3.   

    参考http://liminzhang.blog.51cto.com/282137/53361
      

  4.   

       #region 添加DataGridView底行合计数 的四个方法        /// <summary>
            /// 计算合计算        /// </summary>
            /// <param name="dgv">要计算的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[ "@xu.Hao" ] = 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[ "@xu.Hao" ] = ((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 dataGridView_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 == "@xu.Hao") 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[ "@xu.Hao" ] = n;
                        n++;
                        tdr.EndEdit( );                }
                    sortDgv.Refresh( );
                    sortDgv.RefreshEdit( );            }
                ndr[ "@xu.Hao" ] = ((int)(dt.Rows.Count + 1)).ToString( );
                ndr.EndEdit( );
                dt.Rows.Add( ndr );
                sortDgv.Tag = ndr;            //--
                sortDgv.Sort( sortDgv.Columns[ "@xu.Hao" ], ListSortDirection.Ascending );
                sortDgv.Columns[ "@xu.Hao" ].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 dataGridView_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( "@xu.Hao" ) < 0)
                {
                    DataColumn dc = new DataColumn( "@xu.Hao", System.Type.GetType( "System.Int32" ) );
                    dt.Columns.Add( dc );
                    dgv.Columns[ "@xu.Hao" ].DisplayIndex = 0;
                    dgv.Columns[ "@xu.Hao" ].HeaderText = "#";                dgv.Columns[ "@xu.Hao" ].SortMode = DataGridViewColumnSortMode.Programmatic;
                    dgv.AutoResizeColumn( dgv.Columns[ "@xu.Hao" ].Index );                dgv.Columns[ "@xu.Hao" ].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
                }
                SumDataGridView( dgv );
            }
            private void dataGridView_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底行合计数 的四个方法
      

  5.   

    在DataGridView1_CellEndEdit事件中加入 if (!DBNull.Value.Equals(dataGridView1.CurrentRow.Cells["数量"].Value) && !DBNull.Value.Equals(dataGridView1.CurrentRow.Cells["价格"].Value))
                {
                    dataGridView1.CurrentRow.Cells["总值"].Value =decimal.Parse(dataGridView1.CurrentRow.Cells["数量"].Value.ToString()) * decimal.Parse(dataGridView1.CurrentRow.Cells["价格"].Value.ToString());
                }
      

  6.   

    要是要跟数据库关系的话,,你直接在GridView随便的一个事件里面写条跟新数据库的语句就可以了。