datagridview两列计算赋值问题。急急急。。。。。。。。。求教!!!!!!!! 加入客户端的js代码,实现这些功能,在onblur里实现计算,并对总和列赋值.就你目前所讲的,没法写代码给你 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 直接在SQL计算好然后用C#输出string sql="select ,价格,数量,价格*数量 as 总值" 打错string sql="select 价格,数量,价格*数量 as 总值" 参考http://liminzhang.blog.51cto.com/282137/53361 #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底行合计数 的四个方法 在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()); } 要是要跟数据库关系的话,,你直接在GridView随便的一个事件里面写条跟新数据库的语句就可以了。 如何关闭一个窗口和它对应的进程? 如何读取指定路径的配置文件呢?? C# 实时获取打印机状态 如何更改VS2005解决方案的名称 郁闷了 TreeView控件 C# CAD二次开发如何使用DWG文件中的图块呢? 请问:怎么把整型数组类型转换成结构型? c#读取TXT文本的问题>>>> 动态的给TreeView,增加了几个结点treenode,如何给treenode写一个点击事件? 水晶报表打包 无法停止自己写的一个windows服务 C#中的图片管理
string sql="select ,价格,数量,价格*数量 as 总值"
string sql="select 价格,数量,价格*数量 as 总值"
/// 计算合计算 /// </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底行合计数 的四个方法
{
dataGridView1.CurrentRow.Cells["总值"].Value =decimal.Parse(dataGridView1.CurrentRow.Cells["数量"].Value.ToString()) * decimal.Parse(dataGridView1.CurrentRow.Cells["价格"].Value.ToString());
}