DataView source = (DataView) MyDataGrid.ItemsSource;
foreach (DataRowView vw in source)
{
if (vw.Row[dummyColumnIndex] != null &&
vw.Row[dummyColumnIndex].ToString() == DisplayValue)
{
vw.Row[dummyColumnIndex] = string.Empty;
break;
}
}
请注意,我的foreach循环中断,这意味着我只需要将第一个匹配行的列值重置为空字符串。
谢谢!
答案 0 :(得分:4)
是的,但你需要使用IEnumerable的Cast方法将它转换为一个通用的IEnumerable,其中Type参数是'DataRowView',然后你可以做这样的事情。这将使用提供的逻辑(以lambda表达式的形式)来评估DataView中的每个记录,以确定它是否匹配。它将返回它找到的第一个,如果没有找到,则返回'null'。无论如何你都可以处理null;我通常喜欢在这种情况下抛出异常,除非有正当理由不能找到匹配。
var match = source.Cast<DataRowView>().FirstOrDefault(
s => s[dummyColumnIndex] != null &&
s[dummyColumnIndex].ToString() == DisplayValue);
if (match == null)
throw new Exception("Could not find match for " + DisplayValue);
match[dummyColumnIndex] = String.Empty;
答案 1 :(得分:2)
是的,它可以。我更倾向于使用查询语法:
var query = from vw in source.Cast<DataRowView>()
where vw.Row[dummyColumnIndex] != null &&
vw.Row[dummyColumnIndex].ToString() == DisplayValue
select vw;
var item = query.FirstOrDefault();
if (item != null)
item.Row[dummyColumnIndex] = "";
正如其他人所说:如果找不到匹配项,最好使用'FirstOrDefault'来避免抛出异常。
答案 2 :(得分:1)
var firstMatch = source
.Cast<DataRowView>()
.First(vw => vw.Row[dummyColumnIndex] != null && vw.Row[dummyColumnIndex].ToString() == DisplayValue);
firstMatch.Row[dummyColumnIndex] = string.Empty;
请注意,如果没有匹配,则会抛出异常,因此您也可以这样做:
var firstMatch = source
.Cast<DataRowView>()
.FirstOrDefault(vw => vw.Row[dummyColumnIndex] != null && vw.Row[dummyColumnIndex].ToString() == DisplayValue);
if(firstMatch != null)
firstMatch.Row[dummyColumnIndex] = string.Empty;
答案 3 :(得分:0)
如果目标是在列表中找到某些内容
{
if(sorted)http://en.wikipedia.org/wiki/Search_algorithms
否则如果(高效)http://en.wikipedia.org/wiki/Sort_algorithms
否则我不知道
}