计算datagrid中的值

worldofmy 2006-11-11 09:40:15
datagrid中有单价,数量,金额这3列 要求在输入单价和数量之后自动计算值并放到金额这一列,该怎么实现?我用的是vs.net 2003 应该怎么样添加单元格改变事件 右键控件 弹出后的菜单没有“添加事件处理程序”这一项
...全文
131 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
worldofmy 2006-11-11
  • 打赏
  • 举报
回复
谢谢各位
worldofmy 2006-11-11
  • 打赏
  • 举报
回复
呵呵 楼上两位都太厉害了 只不过代码太多 都看花眼了 呵呵 谢谢各位给的详细解答 我再试试啊 不过我是直接在form中拖上一个datagrid 然后就不管了 (也不会设置) 然后填充一个dataset 然后 datagrid1.datasource=ds,datagrid1.setdatabinding(ds,tabel)就这样啊
yao991118 2006-11-11
  • 打赏
  • 举报
回复
我还说你看明白了给你说下面的呢!!
jacobwc 2006-11-11
  • 打赏
  • 举报
回复
一个绑定例子
//----------绑定数据并设置表格各列的属性----------
private void DataGridStateControl()
{
newTable = new DataTable();
newTable.Columns.Add("生产批次",typeof(string)); //0
newTable.Columns.Add("报废数",typeof(decimal)); //4
newTable.Columns.Add("计划数",typeof(string)); //5
newTable.Columns.Add("客户名称",typeof(string)); //6
newTable.Columns.Add("单价",typeof(decimal)); //10
newTable.Columns.Add("单位面积",typeof(decimal)); //11
newTable.Columns.Add("产值元",typeof(decimal),"单价*生产数"); //运用DataTable的表达式自动运算
newTable.Columns.Add("产量m2",typeof(decimal),"单位面积*生产数");//-单位面积*报废数

this.dataGrid1.DataSource = newTable;
newTable.Rows.Add(newTable.NewRow()); //向表中添加一行
DataGridTableStyle ts = new DataGridTableStyle();//设置表格模式
DataGridTextBoxColumn aColumnTextColumn;
ts.AllowSorting = false;
ts.AlternatingBackColor = Color.LightGray; //交替显示
ts.MappingName = newTable.TableName;
int numCols = newTable.Columns.Count;
for (int i = 0;i< numCols;i++)
{
aColumnTextColumn = new DataGridTextBoxColumn();
if (i==7)
{
aColumnTextColumn.Width = 100;
aColumnTextColumn.ReadOnly=true;
}
aColumnTextColumn.MappingName = newTable.Columns[i].ColumnName;
aColumnTextColumn.HeaderText = newTable.Columns[i].ColumnName;
aColumnTextColumn.NullText = "";
aColumnTextColumn.Format = "N"; //设置为数字格式显示
ts.GridColumnStyles.Add(aColumnTextColumn);
}
this.dataGrid1.TableStyles.Add(ts);
}
jacobwc 2006-11-11
  • 打赏
  • 举报
回复
不用定位单元格
不知道你是怎么样绑定数据的
单元格是什么类型的在你增加单元格就知道了
yourDataTable.Columns.Add("单价",typeof(decimal));
yourDataTable.Columns.Add("数量",typeof(decimal));

至于事件
可以在yourdatagrid的属性查看事件,一个雷电附号的样子
下面有很多事件
你要增加哪一个就是对应的事件空白栏双击就行
不知道说清楚了没

worldofmy 2006-11-11
  • 打赏
  • 举报
回复
哎 如果能当面指点就好了
要能定位单元格 然后把两个单元格的内容* 然后附值到第三个单元格也行 但是一直不知道该怎么定位单元格 单元格的值又是什么 是什么类型的 怎么样附值? 这样可以吗 如果可以 该怎么写? 并且问一个初级问题 应该怎么样添加自带的事件处理程序 比如 应该怎么样添加单元格改变事件 右键控件 弹出后的菜单没有“添加事件处理程序”这一项
jacobwc 2006-11-11
  • 打赏
  • 举报
回复

增加一计算列不就OK了
不用这么多事件之类
yourDataTable.Columns.Add("金额",typeof(decimal),"单价*数量");
this.dataGrid1.DataSource = yourDataTable;//绑定
当然前提是你的单价列和数量列的列名为“单价”“数量”
worldofmy 2006-11-11
  • 打赏
  • 举报
回复
楼上果然高手 这样的代码也能写出来 可是小弟太菜 看不懂啊 5555555555555555
yao991118 2006-11-11
  • 打赏
  • 举报
回复
看明白没有?
yao991118 2006-11-11
  • 打赏
  • 举报
回复
然后创建DATAGRID的时候为:
private MyDataGrid dgBillNote;
this.dgBillNote = new 项目.程序.MyDataGrid();
yao991118 2006-11-11
  • 打赏
  • 举报
回复
那么就简单多了:
你先要将你的DATAGRID改写
public class MyDataGrid : DataGrid
{
private const int WM_KEYDOWN = 0x100;
protected override bool ProcessCmdKey(ref System.Windows.Forms.Message msg, System.Windows.Forms.Keys keyData)
{
if(msg.WParam.ToInt32() == (int) Keys.Enter)
{
SendKeys.Send("{Tab}");
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}

public override bool PreProcessMessage( ref Message msg )
{
Keys keyCode = (Keys)(int)msg.WParam & Keys.KeyCode;
if(msg.Msg == WM_KEYDOWN && keyCode == Keys.Delete)
{
if(MessageBox.Show("确认删除?", "确认", MessageBoxButtons.YesNo) == DialogResult.No)
return true;
}
return base.PreProcessMessage(ref msg);
}
}
worldofmy 2006-11-11
  • 打赏
  • 举报
回复
高手指点 急..............出汗了 !!!
worldofmy 2006-11-11
  • 打赏
  • 举报
回复
js我不会啊 我懂的编程知识很少 做的是windows程序
yao991118 2006-11-11
  • 打赏
  • 举报
回复
要开你做的是windows程序还是web程序
pkkfaii 2006-11-11
  • 打赏
  • 举报
回复
用js做吧。。不刷新。。后台做的话 要刷新的。。在datagrid 的ItemDataBound事件里做

111,095

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧