填充一个数据集会覆盖另一个数据集结果

时间:2015-03-21 10:04:56

标签: c# winforms

已经2-3个小时了,我仍然无法理解为什么会这样。需要帮助。

我使用数据集填充dataGridView。主表和详细信息有两个表。我正在使用两个数据集来从数据集中获取两个表(我还实现了从数据库中获取的类,所以我只是调用该类的函数,该函数返回包含结果的数据集,并将其分配给我的本地数据集)。

现在发生了什么是第一次我获取详细信息表并检查它是否为null等,如果不是我获取第二个。这里出现问题,因为第二个填充第一个覆盖很快就会出现问题。我现在已经忘记了,我无法理解正在发生的事情。这是我的代码:

private void txtInvNumber_TextChanged(object sender, EventArgs e)
    {
        if (txtInvNumber.Text != "")
        {
            try
            {
                DataSet dsdetail = new DataSet();
                DataTable dtdetail = new DataTable();
                string query = "SELECT sell.ItemId 'Item ID',Item 'Item Name' ,sell.Quantity ,Status ,Credit_Limit 'Credit Limit',"
                + "Total_amount 'Total Amount' ,Discount_Allowed 'Discount' ,Discounted_amount 'Discounted Amount' , "
                + "Payable_Amount 'Payable Amount',Advance 'Advance Paid',Amount_Received 'Amount Received', Amount_Receivable 'Amount Receivable' "
                + "FROM dbo.DSelling_Information sell  join Item_Infomation it on  sell.ItemId=it.Item_ID "
                + "where InvoiceNum = '" + txtInvNumber.Text + "'";

                string query_master = "select Sale_Orde_date 'Date', mp.Cust_ID,CUST_Name,Total_Quantity,Total_Amount,"
                + "Amount_Received,Amount_Receivable,Report_Status from dbo.MSelling_Information mp join dbo.Customer_Information cs on mp.Cust_ID=cs.CUST_ID"
                + " where Invoice_num = '" + txtInvNumber.Text + "'";
                dsdetail = db.func_ds(query);
                if (dsdetail != null && dsdetail.Tables != null && dsdetail.Tables[0].Rows.Count > 0)
                {
                    ds2 = db.func_ds(query_master); <--here dsitem gets populated too.
                    if (ds2 != null && ds2.Tables != null && ds2.Tables[0].Rows.Count > 0)
                    {
                        dtSellDate.Value = DateTime.ParseExact(ds2.Tables[0].Rows[0]["Date"].ToString(), "M/dd/yyyy", CultureInfo.InvariantCulture);
                        txtCustID.Text = ds2.Tables[0].Rows[0]["Cust_ID"].ToString();
                        txtCustomerName.Text = ds2.Tables[0].Rows[0]["CUST_Name"].ToString();
                        txtTotalQuantity.Text = ds2.Tables[0].Rows[0]["Total_Quantity"].ToString();
                        txtTotalAmount.Text = ds2.Tables[0].Rows[0]["Total_Amount"].ToString();
                        txtAmountRcvd.Text = ds2.Tables[0].Rows[0]["Amount_Received"].ToString();
                        txtAmountRcvble.Text = ds2.Tables[0].Rows[0]["Amount_Receivable"].ToString();
                        txtReportStatus.Text = ds2.Tables[0].Rows[0]["Report_Status"].ToString();
                        dataGridView1.AutoGenerateColumns = true;
                        dtdetail = dsdetail.Tables[0];
                        //dataGridView1.DataSource = db.func_ds(query).Tables[0]; // dataset
                        dataGridView1.DataSource = dtdetail;

                        isDgFill = true;
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }
        else
        {
            ds1.Clear();
            dataGridView1.DataSource = null;
            dataGridView1.Columns.Clear();
            isDgFill = false;
        }
    }

我尝试使用新关键字但没有运气

    dataGridView1.DataSource = new DataTable("dtdetail");

也是这样:

    dataGridView1.DataSource = new DataSet("dsdetail").Tables[0];

这是另一个问题: 我在填充数据时尝试了直接函数调用:

    dataGridView1.DataSource = db.func_ds(query).Tables[0];

它工作但是在cellclick我需要做多个计算,其中包括从数据库中获取数据,所以每当我使用数据集获取它只是使datagridview的数据源为null。

我为每个数据集使用不同的名称但没有发生任何事情。如果有人能告诉我哪里错了,我会非常感谢他\她很多。

1 个答案:

答案 0 :(得分:0)

如果你重新分配数据网格视图的数据源它将清除前一个。我认为这是你犯的错误。