我做的是Windowform,有一两个名为dv1和dv2的datagridview,现在dv1显示的内容有三列为:
菜名        单价    金额     
水煮牛肉    15     15
茶洞豆腐    10     10
可乐         6      6
雪碧         7      7
现在想双击dv1选中行时
dv2显示有五列,且前三列为选中行的数据
菜名     单价    金额    记帐人  开单日期
水煮牛肉 15     15      张明    20090421
茶洞豆腐 10     10      张明    20090121
每双击dv1的一行,dv2便会新添加这一行的数据并且加上两列。
该如何实现这个功能呢!或者高手给个思路。我试过用dv2通过绑定新建立的datatable来做,但新添加不了一行,再一次双击时添加不了数据!

解决方案 »

  1.   

    删除数据源Table里.加家到你DV2帮的TABLE上就可以了.
      

  2.   

    private void dv1_DoubleClick(object sender, EventArgs e)
            {
                string name = dv1.Rows[dv1.CurrentRow.Index].Cells["菜名"].Value.ToString();
                int price = int.Parse(dv1.Rows[dv1.CurrentRow.Index].Cells["单价"].Value.ToString());
                int amount = int.Parse(dv1.Rows[dv1.CurrentRow.Index].Cells["金额"].Value.ToString());            DataTable dt = dv2.DataSource as DataTable;
                DataRow dr = dt.NewRow();
                dr["菜名"] = name;
                dr["单价"] = price;
                dr["金额"] = amount;
                dr["记帐人"] = "张明";   //你取出来的人名
                dr["开单时间"] = DateTime.Now;
                dt.Rows.Add(dr);            dv2.DataSource = dt;
            }
      

  3.   

    3楼方法可行,
    如果你的dv2可以加行也可以自己取dv2的最末行,
    然后取dv1里面选中的数据自己加到对应列上去,再把dv2加一行
      

  4.   

    是让数据在dv2中显示,也就是说把选中的内容放到dv2中去,不用保存到数据库!只想让dv2能这样显示效果就行了:
    dv2显示有五列,且前三列为选中行的数据 
    菜名    单价    金额    记帐人  开单日期 
    水煮牛肉 15    15      张明    20090421 
    茶洞豆腐 10    10      张明    20090121 
      

  5.   

    dv2 绑定DataTable ,双击dv1时添加新行到DataTable 即可
      

  6.   

    如果dv2没有绑定数据源,那就在dv1的cellclick事件里,dv2.Rows.Add(...);直接把dv1的数据和记账人,日期这些信息加上去阿。
      

  7.   

    如果2绑定的是数据源,就必须得把数据放到表里,然后在从表添加一条记录,然后重新绑定。否则的话你就可以直接用2的Rows.Add方法直接添加了
      

  8.   

    我用的代码是:
     private void dv1_CellContentDoubleClick_1(object sender, DataGridViewCellEventArgs e)
            {
                string id = dv1.Rows[dv1.CurrentRow.Index].Cells[0].Value.ToString();
                int danjia = Convert.ToInt32(dv1.Rows[dv1.CurrentRow.Index].Cells[1].Value.ToString());
                int jin=Convert.ToInt32(dv1.Rows[dv1.CurrentRow.Index].Cells[2].Value.ToString());            DataTable dt = new DataTable("user");
                DataColumn dc;
                dc = new DataColumn("菜名", System.Type.GetType("System.String"));
                dc = new DataColumn("单价", System.Type.GetType("System.Int32"));
                dc = new DataColumn("金额", System.Type.GetType("System.Int32"));
                dc = new DataColumn("记帐人", System.Type.GetType("System.String"));
                dc = new DataColumn("开单日期", System.Type.GetType("System.String"));
                dt.Columns.Add(dc);
                
                DataRow dr = dt.NewRow();
                dr["菜名"] = id;
                dr["单价"] = danjia;
                dr["金额"] = jin;
                dr["记帐人"]="张明";
                dr["开单日期"]=DataTime.Now;
                dt.Rows.Add(dr);
               
                dv2.DataSource = dt;
            
            }
    出现的错误是:列菜名不属于表。不知道为什么?
      

  9.   

    回复LoveLife_Go :上面你的好像会出现“未将对象设置实例”的错误。因为对datatable要先设置列,然后才是行。
      

  10.   

    dc = new DataColumn("菜名", System.Type.GetType("System.String"));
                dc = new DataColumn("单价", System.Type.GetType("System.Int32"));
    因为你执行完第一条语句的时候,没有执行dt.Columns.Add(dc);然后又执行第二条语句,一直往下执行,最后就剩一列了,前面的几列都没加上
      

  11.   

    你完全可以这样写,不用那么麻烦
    dt.Columns.Add("菜名", System.Type.GetType("System.String"));
      

  12.   

    顶 LoveLife_Go 说的很详细 确实是这样做的呀 你在比较看下是不是字符串写错了 大小写的问题呀什么的