已经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。
我为每个数据集使用不同的名称但没有发生任何事情。如果有人能告诉我哪里错了,我会非常感谢他\她很多。
答案 0 :(得分:0)
如果你重新分配数据网格视图的数据源它将清除前一个。我认为这是你犯的错误。