Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将DataTable绑定到DataGrid后的空行_C#_Wpf_Datatable_Datagrid - Fatal编程技术网

C# 将DataTable绑定到DataGrid后的空行

C# 将DataTable绑定到DataGrid后的空行,c#,wpf,datatable,datagrid,C#,Wpf,Datatable,Datagrid,我有一个DataTable,其中一个列名中有结尾空格 假设数据库中有一个表: CREATE TABLE [dbo].[Text_with_pk]( [char_ 10 ] [char](10) NOT NULL, [nchar_10] [nchar](10) NOT NULL, [varchar_max] [varchar](max) NOT NULL, [id] [int] IDENTITY(1,1) NOT NULL, CONSTRAINT [PK_T

我有一个
DataTable
,其中一个列名中有结尾空格

假设数据库中有一个表:

CREATE TABLE [dbo].[Text_with_pk](
    [char_ 10    ] [char](10) NOT NULL,
    [nchar_10] [nchar](10) NOT NULL,
    [varchar_max] [varchar](max) NOT NULL,
    [id] [int] IDENTITY(1,1) NOT NULL,
 CONSTRAINT [PK_Text_with_pk] PRIMARY KEY CLUSTERED 
(
    [id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] 
[char\u10]
的名称中有结尾空格

然后我将此表的内容读入
DataTable
,并将其绑定到
DataGrid

<DataGrid Grid.Row="2" 
                      x:Name="PreviewDataGrid"
                      AutoGenerateColumns="True"
                      SelectedValuePath="SelectedCells"
                      SelectedCellsChanged="PreviewDataGrid_OnSelectedCellsChanged"
                      ItemsSource="{Binding Data}"
                      AutoGeneratingColumn="PreviewDataGrid_OnAutoGeneratingColumn">
        </DataGrid>
但它不起作用,我不断得到这个错误:

System.Windows.Data Error: 17 : Cannot get 'Item[]' value (type 'Object') from '' (type 'DataRowView'). BindingExpression:Path=[QOF754    ]; DataItem='DataRowView' (HashCode=19681030); target element is 'TextBlock' (Name=''); target property is 'Text' (type 'String') TargetInvocationException:'System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.ArgumentException: QOF754 is neither a DataColumn nor a DataRelation for table [dbo].[Test].
   at System.Data.DataRowView.get_Item(String property)
   --- End of inner exception stack trace ---
   at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
   at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments)
   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at MS.Internal.Data.PropertyPathWorker.GetValue(Object item, Int32 level)
   at MS.Internal.Data.PropertyPathWorker.RawValue(Int32 k)'
我事先不知道表的结构,列名。所以我需要处理所有的情况

这里
[QOF754]
是实际的列名

private void PreviewDataGrid_OnAutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
    {
        var column = (e.Column as DataGridTextColumn);

        if (column != null)
        {
            column.Binding = new Binding($"[{e.PropertyName}]");
            column.Header = e.PropertyName;
            column.Binding.TargetNullValue = "NULL";
        }
    }
我试图在
转换器中转义它

 ItemsSource="{Binding Data, Converter={StaticResource DataGridConverter}}"


 public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if (value == null)
                return null;

            var dataTable = value as DataTable;
            if (dataTable != null)
            {
                foreach (DataColumn column in dataTable.Columns)
                {

                    column.ColumnName = column.ColumnName.Trim();
                }
            }

            return value;
        }
但是列名是不同的(经过修剪),这对我不起作用

如何将带有尾随空间的列绑定到DataGrid并使其工作