它使用多个值多次遍历foreach循环,但只用一行填充网格。
string textLines;
string[] textLine;
textLines = scannedGuid.Text;
textLine = textLines.Split(Environment.NewLine.ToArray(), StringSplitOptions.RemoveEmptyEntries);
DataSet ds2 = null;
Database db2 = DatabaseFactory.CreateDatabase("CouponConnectionString");
Database db2 = DatabaseFactory.CreateDatabase("ConnectionString");
foreach (string s in textLine)
{
try
{
DbCommand command2 = db.GetStoredProcCommand("sel_Guid_p");
db2.AddInParameter(command2, "@pGuid", DbType.String, s);
ds2 = db2.ExecuteDataSet(command2);
}
catch (Exception ex)
{
}
}
DataGrid1.DataSource = ds2;
DataBind();
答案 0 :(得分:2)
我假设这段代码
DbCommand command2 = db.GetStoredProcCommand("sel_Guid_p");
db2.AddInParameter(command2, "@pGuid", DbType.String, s);
ds2 = db2.ExecuteDataSet(command2);
返回一行。
仅仅因为你多次调用它,并不意味着有多个记录。您正在覆盖循环执行的所有变量的值。
也许您可以将数据集的结果放入对象(创建表示结果的类),然后在循环时将每个结果对象添加到列表中,然后将该列表绑定到网格。
一个例子:
List<MyCustomerClassForTheReturnedValues> values = new List<MyCustomClassForTheReturnedValues>();
foreach (string s in textLine)
{
DbCommand command2 = db.GetStoredProcCommand("sel_Guid_p");
db2.AddInParameter(command2, "@pGuid", DbType.String, s);
MyCustomClassForTheReturnedValues x = new MyCustomClassForTheReturnedValues(db2.ExecuteDataSet(command2));
values.Add(x);
}
DataGrid1.DataSource = values;
DataGrid1.DataBind();
答案 1 :(得分:1)
因为每次都要覆盖数据集,所以当你完成循环时,你只有最终的数据集,我认为它只包含一行。
你想做什么?
相反 - 您需要将所有参数放入一个SP中以获取所有参数,或者将多个数据集合并到一个数据结构中以填充数据网格。