我做的是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来做,但新添加不了一行,再一次双击时添加不了数据!
菜名 单价 金额
水煮牛肉 15 15
茶洞豆腐 10 10
可乐 6 6
雪碧 7 7
现在想双击dv1选中行时
dv2显示有五列,且前三列为选中行的数据
菜名 单价 金额 记帐人 开单日期
水煮牛肉 15 15 张明 20090421
茶洞豆腐 10 10 张明 20090121
每双击dv1的一行,dv2便会新添加这一行的数据并且加上两列。
该如何实现这个功能呢!或者高手给个思路。我试过用dv2通过绑定新建立的datatable来做,但新添加不了一行,再一次双击时添加不了数据!
{
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;
}
如果你的dv2可以加行也可以自己取dv2的最末行,
然后取dv1里面选中的数据自己加到对应列上去,再把dv2加一行
dv2显示有五列,且前三列为选中行的数据
菜名 单价 金额 记帐人 开单日期
水煮牛肉 15 15 张明 20090421
茶洞豆腐 10 10 张明 20090121
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;
}
出现的错误是:列菜名不属于表。不知道为什么?
dc = new DataColumn("单价", System.Type.GetType("System.Int32"));
因为你执行完第一条语句的时候,没有执行dt.Columns.Add(dc);然后又执行第二条语句,一直往下执行,最后就剩一列了,前面的几列都没加上
dt.Columns.Add("菜名", System.Type.GetType("System.String"));