datagrid中有单价,数量,金额这3列 要求在输入单价和数量之后自动计算值并放到金额这一列,该怎么实现?我用的是vs.net 2003 应该怎么样添加单元格改变事件 右键控件 弹出后的菜单没有“添加事件处理程序”这一项

解决方案 »

  1.   

    用js做吧。。不刷新。。后台做的话 要刷新的。。在datagrid 的ItemDataBound事件里做
      

  2.   

    要开你做的是windows程序还是web程序
      

  3.   

    js我不会啊 我懂的编程知识很少  做的是windows程序
      

  4.   

    那么就简单多了:
    你先要将你的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);  

    }
      

  5.   

    然后创建DATAGRID的时候为:
    private MyDataGrid dgBillNote;
    this.dgBillNote = new 项目.程序.MyDataGrid();
      

  6.   


    增加一计算列不就OK了
    不用这么多事件之类
    yourDataTable.Columns.Add("金额",typeof(decimal),"单价*数量");
    this.dataGrid1.DataSource = yourDataTable;//绑定
    当然前提是你的单价列和数量列的列名为“单价”“数量”
      

  7.   

    不用定位单元格
    不知道你是怎么样绑定数据的
    单元格是什么类型的在你增加单元格就知道了
    yourDataTable.Columns.Add("单价",typeof(decimal));
    yourDataTable.Columns.Add("数量",typeof(decimal));至于事件
    可以在yourdatagrid的属性查看事件,一个雷电附号的样子
    下面有很多事件
    你要增加哪一个就是对应的事件空白栏双击就行
    不知道说清楚了没
      

  8.   

    一个绑定例子
    //----------绑定数据并设置表格各列的属性----------
    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);
    }
      

  9.   

    呵呵  楼上两位都太厉害了 只不过代码太多 都看花眼了 呵呵 谢谢各位给的详细解答  我再试试啊   不过我是直接在form中拖上一个datagrid 然后就不管了 (也不会设置) 然后填充一个dataset 然后 datagrid1.datasource=ds,datagrid1.setdatabinding(ds,tabel)就这样啊