0

这是我第一次来这里,所以我会尽力描述我的问题:

我有一个表格,在那个表格上我有两个数据网格,我们称它们为dg1dg2

dg1通过 dataadapter 连接到 mssql 数据库,而dg2不是!假设我在dg1中有关于产品的信息:

  • 产品编号
  • 描述
  • 价格

dg2 中,我有一些我们可以称之为 bill 的东西。所以在dg2我有列

  • 账单ID
  • 帐号ID
  • 产品编号
  • 描述
  • 价格
  • 数量

正如您可能预测的那样, billID 是主键,所有其他的都是外键。由于dg1填充了数据库中的数据,因此当用户单击dg1中的一行以将数据传递给dg2时,我想要,而需要以某种方式插入来自 dg2 的其他数据(无论如何这是我的问题)。我有数据库表账单,但我想通过 将数据从一个传递到另一个celldoubleclickevent,并将所有数据存储在数据库的账单表中。

public void loadData() 
{ 
    try 
    { 
        SqlConnection con1 = getConnection();
        con1.Open();
        SqlCommand com1 = new SqlCommand();
        com1.Connection = con1;
        com1.CommandType = CommandType.Text;
        com1.CommandText = "select * from bill";
        SqlDataReader reader = com1.ExecuteReader();
        dataGridView2.Rows.Clear();
        while (reader.Read()) 
        {

            dataGridView1.AutoGenerateColumns = false; 
            dataGridView2.Rows.Add();
            dataGridView2.Rows[i].Cells[0].Value = reader["billID"].ToString();
            dataGridView2.Rows[i].Cells[1].Value = reader["acountnumberID"].ToString(); 
            dataGridView2.Rows[i].Cells[2].Value = reader["productID"].ToString();
            dataGridView2.Rows[i].Cells[3].Value = reader["Quantity"].ToString();
            dataGridView2.Rows[i].Cells[4].Value = reader["Description"].ToString();
            dataGridView2.Rows[i].Cells[5].Value = reader["price"].ToString();
            i++; 
        }
    }

谢谢

4

1 回答 1

0

这里有几个步骤。

首先,您需要从 dg1 获取信息。您可以使用RowIndex事件参数的属性来执行此操作,但您需要检查用户是否没有双击标题。

//This will depend on how the grid is bound
var dg1ProductID = GetProductID(dg1.datasource, e.RowIndex);

这个方法的主体可能很简单

private void GetProductID(Int32 RowIndex)
{
    return (Int32)(dg1.Rows[RowIndex].Cells[0]);
}

其次,您需要将信息放入 dg2。

var newRow = dataGridView2.Rows.Add();

var bill = dataSet1.Tables[0].NewRow();
var accountNumber = GetCurrentAccountNumber();
var userQuantity = AskUserForQuantity();

dataGridView2.Rows[newRow].Cells[0].Value = -1;
dataGridView2.Rows[newRow].Cells[1].Value = accountNumber;
dataGridView2.Rows[newRow].Cells[2].Value = dg1ProductID;
dataGridView2.Rows[newRow].Cells[3].Value = userQuantity;
dataGridView2.Rows[newRow].Cells[4].Value = dg1Description;
dataGridView2.Rows[newRow].Cells[5].Value = dg1price;

由于账单 ID 是主键,我假设它是自动填写的。

第三,您想将数据保存到账单中,不确定是否要在双击事件或单独的按钮单击事件中执行此操作(例如当用户点击时OK)。

如果您在双击中执行此操作,则只需将刚刚添加到方法中的相同值传递到将它们保存到数据库中。

Save(accountNumber, dg1ProductID, userQuantity, dg1Description, dg1price);

如果没有,那么您可以枚举数据并从单元格值中保存

foreach(DataGridViewRow Row in dg2.Rows)
{
    if (Row.Cells[0] == -1)
    {
        Save(Row.Cells[1], Row.Cells[2], Row.Cells[3], Row.Cells[4], Row.Cells[5]);
    }
}
于 2013-03-28T13:48:37.587 回答