2011-05-23 101 views
1

我在将一个名为“[name] version”的列添加到DataGrid时遇到问题。如果我有“[name]”或“version [name]”之类的东西,那么转义,unicode或所有工作加倍。只有在右括号后面有字符时才会出现问题。 “[[name] version]”也可行,但不是我所需要的。DataTable列名称包含方括号[name]

我正在使用WPF和C#,这行代码将DataTable绑定到DataGrid。

datagrid1.ItemsSource = dataTable1.DefaultView; 

我收到的错误是:

在[名] '...... '版本' “ ” '' 的PropertyPath“ Binding.Path在语法错误 ”' 语法错误。

+0

您可以更改列名称,以便它不存在这个问题?例如'VersionName' – taylonr 2011-05-23 13:40:05

+0

@taylonr,不,公司需要括号作为方括号,而其中的名称是商标实体/符号。 – Benjamin 2011-05-23 14:25:40

+0

@Ben ...但为什么你关心数据库中的字段是用商标名称命名的?在数据库中将其称为field1,然后显示'[我的商标包围字段]名称'只是我的2美分,我知道您不能始终更改字段名称,但它可能是一个简单的工作 – taylonr 2011-05-23 14:30:45

回答

0

SQL Server允许使用方括号或双引号围绕列名......可以使用双引号吗?

+0

不,DataGrid列标题名称必须包含打开和关闭的方括号。请注意,我指的是WPF窗口中的DataGrid,而不是数据库表上的数据列。 – Benjamin 2011-05-24 06:45:30

0

我刚刚写了一个帮助函数,它改变了ColumnName属性来删除像[]和空格这样的特殊字符,我只是将这些字符留在Caption属性中。所以然后我将Caption绑定到列标题和ColumnName到DisplayMemberBinding。

0

您所需要做的就是跳过方括号。

参见:

var ds = new System.Data.DataSet(); 
      var dt = ds.Tables.Add(); 
      dt.Columns.Add("[a[b]c", typeof(decimal)); 
      dt.Rows.Add(1); 
      dt.Rows.Add(2); 
      dt.Rows.Add(3); 
      dt.Select("[[a[b\\]c]=3").Length.ShouldBe(1);