【发布时间】:2010-09-13 14:11:08
【问题描述】:
我在 DataView 行过滤器属性中收到“System.Data.dll 中发生类型为 'System.StackOverflowException' 的未处理异常”。我没有得到任何堆栈跟踪。 所以任何人都可以帮助我。请在下面找到我在 filterView 中遇到错误的代码。
DataSet metalAttributeDS = LoadItemData(); //loads the static dataset
DataTable metalDataTable = metalAttributeDS.Tables["FilterTable"];
DataView metalfilterView = new DataView(metalDataTable);
metalfilterView.ApplyDefaultSort = true;
metalfilterView.RowFilter = queryBuilder +
string.Format(
" And AttributeName='Metal' and AttributeValueID in ({0})",
string.Join(",", AttributeValueID.ToArray())); //forms query condition dynamically.
var res = from DataRowView rowView in metalfilterView select rowView["ItemID"].ToString();
int countParam = 0;
queryBuilder.AppendFormat(" and (");
foreach (string id in res)
{
countParam++;
queryBuilder.AppendFormat(" ItemID = '{0}'", id);
if (res.Count() > countParam)
{
queryBuilder.Append(" Or");
}
}
queryBuilder.Append(" )");
}
DataSet dataSet = LoadItemData(); //loads the static dataset
DataTable dataTable = dataSet.Tables["FilterTable"];
DataView filterView = new DataView(dataTable);
filterView.ApplyDefaultSort = true;
LogHelper.LogInfo(GetType(), "filterView.RowFilter");
filterView.RowFilter = queryBuilder.ToString(); // throws error
谢谢, Mehul Makwana。
【问题讨论】:
-
问题出在哪里。我认为,过滤器正在尝试将字符串 id 与 Guid id 进行比较并得到错误。
-
堆栈溢出异常不是因为这个。我已经用 aristos 建议的内容更改了我的代码,这给了我无法在 System.Guid 上执行 = 操作的错误。
标签: c# asp.net stack-overflow dataview system.data