我正在使用此代码填充DataSet
var ds = new DataSet();
List<string> list = new List<string>();
foreach (DataGridViewRow row in grdInterPOList.Rows)
{
DataGridViewCheckBoxCell chk = row.Cells[0] as DataGridViewCheckBoxCell;
if (Convert.ToBoolean(chk.Value) == true)
if (row.Cells.Count >= 2 && row.Cells[1].Value != null)
{
list.Add(row.Cells[1].Value.ToString());
}
}
foreach (var _PO_No in list)
{
ds= ShippingData_Export(_PO_No);
}
private DataSet ShippingData_Export(string X_PO_NO)
{
var ds = new DataSet();
var sqlConn = new SqlConnection(strConStr);
try
{
sqlConn.Open();
var cmd = new SqlCommand("proc_TBL_PO_M_ShippingExcel", sqlConn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@X_PO_NO", X_PO_NO);
var da = new SqlDataAdapter(cmd);
da.Fill(ds);
sqlConn.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
return ds;
}
如果我们选择多于1个_PO_No,那么我们只会在循环后得到最后一个值。 所以我的问题是如何在结束循环后存储DataSet值。 例如:如果我们在结束循环后选择2 _PO_No:GV01和GV02。我们将得到2 _PO_No不仅是最后一个(GV02)
答案 0 :(得分:2)
代码中的问题是:
foreach (var _PO_No in list)
{
ds = ShippingData_Export(_PO_No);
}
您正在循环浏览列表并在列表中的每个项目上调用ShippingData_Export
,但每次调用此方法时,您都会覆盖ds
。这就是为什么只存储最后一个值。
如果您希望单个DataSet
包含多个结果,则需要将DataSet
传递给ShippingData_Export
方法并将结果添加到其中,而不是每个都创建一个新结果时间。
结果将是这样的:
foreach (var _PO_No in list)
{
ShippingData_Export(_PO_No, ds);
}
private void ShippingData_Export(string X_PO_NO, DataSet ds)
{
var sqlConn = new SqlConnection(strConStr);
try
{
sqlConn.Open();
var cmd = new SqlCommand("proc_TBL_PO_M_ShippingExcel", sqlConn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@X_PO_NO", X_PO_NO);
var da = new SqlDataAdapter(cmd);
da.Fill(ds);
sqlConn.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
return ds;
}
您的代码还有其他一些小问题:
if (Convert.ToBoolean(chk.Value) == true)
之后的块中。习惯明确使用{}使代码更具可读性。