回复 6楼fxdmhtt的帖子
加入转义字符没有解决?
下面是报错提示:
- 在 System.String.InternalSubStringWithChecks(Int32 startIndex, Int32 length, Boolean fAlwaysCopy)
- 在 System.String.Substring(Int32 startIndex, Int32 length)
- 在 C1.WPF.Extensions.GetPropertyValue(Object target, String path)
- 在 C1.WPF.Extensions.GetPropertyValue(Object target, String path)
- 在 C1.WPF.Extensions.GetPropertyValue[T](Object target, String path)
- 在C1.WPF.DataGrid.GetPropertyValue[T](Object source, String propertyPath)
- 在 C1.WPF.DataGrid.Filters.C1AdvancedFiltersBehavior.<>c__DisplayClass34.<GetColumnValues>b__31(Object o)
复制代码
可以看到Path会传入到DataGrid.GetPropertyValue方法中,并最终在C1.WPF.Extensions.GetPropertyValue中处理,而该方法如下:
- internal static object GetPropertyValue(this object target, string path)
- {
- if (target == null)
- {
- return null;
- }
- if (string.IsNullOrEmpty(path))
- {
- return target;
- }
- if (path.Contains("."))
- {
- return target.GetPropertyValue(path.Substring(0, path.IndexOf('.'))).GetPropertyValue(path.Substring(path.IndexOf('.') + 1));
- }
- if (path.Contains("["))
- {
- int num;
- string str = path.Substring(0, path.IndexOf('['));
- string s = path.Substring(path.IndexOf('[') + 1, (path.IndexOf(']') - path.IndexOf('[')) - 1);
- if (int.TryParse(s, out num))
- {
- if (string.IsNullOrEmpty(str))
- {
- return target.GetType().GetProperty("Item", null, new Type[] { typeof(int) }).GetValue(target, new object[] { num });
- }
- return target.GetPropertyValue(str).GetPropertyValue(path.Substring(path.IndexOf('['), (path.IndexOf(']') - path.IndexOf('[')) + 1));
- }
- if (string.IsNullOrEmpty(str))
- {
- return target.GetType().GetProperty("Item", null, new Type[] { typeof(string) }).GetValue(target, new object[] { s });
- }
- return target.GetPropertyValue(str).GetPropertyValue(path.Substring(path.IndexOf('['), (path.IndexOf(']') - path.IndexOf('[')) + 1));
- }
- PropertyInfo property = target.GetType().GetProperty(path);
- if (property == null)
- {
- return null;
- }
- return property.GetValue(target, null);
- }
复制代码
可以看到它是根据'.'来处理的,分割传入的Path,然后去取对应的属性内容;而你自定义的[A.B.C],它必然会去取A属性下的B属性下的C属性(类似描述吧,本人表达能力有限:-| ),这样肯定会报错啊 |