WPF数据绑定:如何将存储过程绑定到Listview

Rob*_*Rob 2 c# data-binding wpf stored-procedures

我有一个按钮,单击该按钮将在SQL Server上运行存储过程,并在同一窗口的网格中显示结果数据.

在Windows窗体世界中,我创建一个数据表,使用dataadapter填充它,然后将数据表分配给我的DataGridView的DataSource属性和poof ...这是我的数据.

我在WPF中使用带有Gridview的ListView尝试了类似的东西,我似乎无法使其工作.我的XAML中有以下内容:

<ListView Grid.Row="1" Name="Preview" ItemsSource="{Binding Path=Report}">
  <GridView>
    <GridViewColumn Header="Name" DisplayMemberBinding="{Binding Path=FormalName}" />
  </GridView>
</ListView>
Run Code Online (Sandbox Code Playgroud)

在我的C#代码中

private void CreateReport(object sender, RoutedEventArgs e) 
{
  DataTable dt = new DataTable("Report");
  SqlConnection cn = new SqlConnection("Data Source=DailyTimesheets;
             Initial Catalog=DailyTimesheets;Integrated Security=SSPI");

  SqlCommand cm = new SqlCommand("Reports.PayrollHoursInterface", cn);
  cm.Parameters.AddWithValue("@PayBatchID", 722);
  cm.CommandType = CommandType.StoredProcedure;

  SqlDataAdapter da = new SqlDataAdapter(cm);
  da.Fill(dt);

  Preview.DataContext=dt;
}
Run Code Online (Sandbox Code Playgroud)

当我单击按钮(触发CreateReport方法)时,我的数据表被填充并分配给Datacontext,但没有显示任何内容.

sta*_*son 6

我做了一个示例应用程序,发现你需要用ListView.View包围你的GridView并将你的ItemsSource设置为{Binding},如下所示:

<ListView Name="Preview" ItemsSource="{Binding}">
<ListView.View>
  <GridView>
    <GridViewColumn Header="Name" DisplayMemberBinding="{Binding Path=FormalName}" />
  </GridView>
 </ListView.View>
</ListView>
Run Code Online (Sandbox Code Playgroud)