我遇到了过滤数据表的问题。一列是calles BANF-Nummer 。使用过滤器,我收到一条错误消息。我为此写了以下代码:
FilterExpression = "(Kontierungsobjekt = 'Kostenstelle' OR Kontierungsobjekt = 'Co-Auftrag') AND BANF-Nummer > '-1'";
dv.RowFilter = FilterExpression; //ERROR!
错误消息是:
找不到列[Nummer]
下面还有另一篇关于类似问题的帖子: Unable to Have (-) Dash in DataView Filter C#
此修复程序无法解决我的问题。如果我试试这个:
FilterExpression = "(Kontierungsobjekt = 'Kostenstelle' OR Kontierungsobjekt = 'Co-Auftrag') AND [BANF-Nummer] > '-1'";
dv.RowFilter = FilterExpression; //错误!
错误信息是:
找不到列[BANF-Nummer]
如果我用另一列测试此功能,例如 Kostenstelle ,它可以完美地工作。所以错误在名称 BANF-Nummer 中是明确的,我无法改变。
这是我的问题的截图: enter image description here
对每一条建议都表示感谢。
答案 0 :(得分:1)
你必须用方括号括起来:
FilterExpression = "(Kontierungsobjekt = 'Kostenstelle' OR Kontierungsobjekt = 'Co-Auftrag') AND [BANF-Nummer] > '-1'";
在文档here
中提到过既然你已经尝试过但它仍然无效:
dv.Table.Columns.Contains("BANF-Nummer")
返回什么?我怀疑false
。
你是对的Tim,它返回false
然后该表不包含此列,也许用于填充此表的sql-query使用了别名或者您输入了拼写错误。
使用以下LINQ查询查找您的列(您的表包含104列作为评论):
List<DataColumn> candidates = dv.Table.Columns.Cast<DataColumn>()
.Where(c=> c.ColumnName.StartsWith("BANF", StringComparison.OrdinalIgnoreCase))
.ToList();
答案 1 :(得分:0)
好的,我发现,sharepoint中的名称内部存储在unicode中。 https://social.msdn.microsoft.com/Forums/sharepoint/en-US/ea47e82b-273e-48bc-a6cb-c961e2c7c06a/how-to-set-and-get-item-if-the-sharepoint-column-name-has-space?forum=sharepointdevelopmentprevious
我可以这样转换它:
string Key = Field.Key; //Co_x002D_Auftrag
Key = System.Xml.XmlConvert.DecodeName(Key); //Co-Auftrag
Key = System.Xml.XmlConvert.EncodeName(System.Xml.XmlConvert.DecodeName(Key)); //Co_x002D_Auftrag
现在我必须弄清楚,如果 - 以及如何 - 我可以将它用于我的过滤功能。