2012-06-26 39 views
0

我有一个DataGrid回合到类型DataTable的DataView属性,但是当我单击生成列我得到“你必须设置ItemsSource,然后才能执行此操作”。不知道我在这里做错了什么。请参见下面的XAML:为什么生成的列对DataGrid绑定到DataTable的DataView不起作用?

<DataGrid AutoGenerateColumns="True" HorizontalAlignment="Stretch" 
     Margin="0" Name="dataGrid1" VerticalAlignment="Stretch" 
     ItemsSource="{Binding Path=DataView/}" 
     DataContext="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=my:MainWindow, AncestorLevel=1}, 
     Path=TransferSchedulesView/}"> 

TransferSchedulesView是我的主窗口的属性,它暴露了一个类型DataTable成员的数据视图属性。任何关于我在哪里出错的建议?

+0

是否在设计模式中发生吗? –

+0

是的,在DataGrid的属性窗口中有'生成列'和'编辑Porperty-Bound Coliumns'链接按钮。当我点击其中的任何一个时,出现错误 – SpaceghostAli

+0

运行时会发生什么? –

回答

1

我看到你绑定可能是不正确的。删除绑定中的前导斜杠,因为绑定的内容不是集合,所以它没有当前项目。

这是我在输出时看到试试你的例子:

System.Windows.Data Error: 40 : BindingExpression path error: '' property not found on 'current item of collection' ''TransferSchedulesView' (HashCode=19117974)'. BindingExpression:Path=TransferSchedulesView/; DataItem='MainWindow' (Name=''); target element is 'DataGrid' (Name='dataGrid1'); target property is 'DataContext' (type 'Object')

这是我的工作的例子。如果你运行它,你会看到自动生成的列:

<DataGrid AutoGenerateColumns="True" 
    ItemsSource="{Binding Path=DataView}" 
    DataContext="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=WpfApplication1:MainWindow, AncestorLevel=1}, Path=TransferSchedulesView}" /> 

namespace WpfApplication1 
{ 
    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
    public partial class MainWindow : Window 
    { 
     public TransferSchedulesView TransferSchedulesView { get; set; } 

     public MainWindow() 
     { 
      InitializeComponent(); 
      TransferSchedulesView = new TransferSchedulesView(){DataView = CreateTable()}; 
     } 

     private static DataTable CreateTable() 
     { 
      var dataTable = new DataTable(); 
      dataTable.Columns.Add("aaa"); 
      dataTable.Columns.Add("bbb"); 
      dataTable.Columns.Add("ccc"); 
      dataTable.Rows.Add("sdaasdasd", "dsdsadasdasdsd", "sdasdadsadsadsd"); 
      dataTable.Rows.Add("sdaasdasd", "dsdsadasdasdsd", "sdasdadsadsadsd"); 
      dataTable.Rows.Add("sdaasdasd", "dsdsadasdasdsd", "sdasdadsadsadsd"); 
      return dataTable; 
     } 
    } 

    public class TransferSchedulesView 
    { 
     public DataTable DataView { get; set; } 
    } 
} 
+0

完美,这工作。另一个问题是,如果表中没有数据,则不会获得列信息 – SpaceghostAli

相关问题