【问题标题】:Binding a DataSet to Listbox将数据集绑定到列表框
【发布时间】:2012-02-09 11:54:29
【问题描述】:

我想将 SQL 查询的结果绑定到 WPF 接口的列表框。正如我看到的许多示例一样,我无法调整我的应用程序以使其正常工作。我在后面使用这段代码:

string sqlStr1 = "SELECT Players.LastName FROM Players";

SqlDataAdapter dAdapt1 = new SqlDataAdapter(sqlStr1, cnStr);
DataSet dataSet1 = new DataSet();
dAdapt1.Fill(dataSet1);

List1.DataContext = dataSet1;

在 xaml 页面中:

<ListBox Name="List1" Grid.Column="1" Grid.Row="2" ></ListBox>

有什么方法可以绑定它们以便名称出现在列表框中?

没有在 xaml 页面中添加任何绑定,当我尝试运行它时会抛出异常。怎么了?

【问题讨论】:

  • 如果你有异常贴出来
  • 这是一个 XamlParseException,带有消息“在匹配指定绑定约束的类型 'TennisPlayers.PlayersHome' 上调用构造函数引发了异常。”行号'5'和行位置'7'。”此外,它会打开一个新页面,标题为“No Source available”。

标签: c# wpf data-binding adapter


【解决方案1】:

您的 itemssource 未设置。

你可以这样做:

 List1.ItemsSource= dataSet1.Tables["Players"]; //instead of List1.DataContext = dataSet1;

 List1.DataContext = dataSet1.Tables["Players"];
 <ListBox Name="List1" ItemsSource="{Binding}" Grid.Column="1" Grid.Row="2" >
  <ListBox.ItemTemplate>
   <DataTemplate>
    <TextBlock Text="{Binding LastName}"/>
   </DataTemplate>
  </ListBox.ItemTemplate>
 </ListBox>

LastName 被假定为列名。顺便说一句,所有代码都是手写的,所以可能会有一些错误:)

【讨论】:

  • 顺便说一句,而不是将源设置为数据集,您应该将源设置为数据集中的数据表
  • 想回答同样的问题,但你只是早了一点:)。
  • 您建议的第二种方法我已经尝试过,但我仍然收到相同的异常。第一个是不可接受的,因为消息状态“不能从 Dataset 隐式转换为 IEnumerable”。什么会导致 XamlParseException?
  • 你必须设置数据表。看我的编辑。我假设 datablename 是“Players”
  • 异常的问题已经结束,因为它是由连接错误引起的。列表框现在可以工作,但数据显示为 System.Data.DataRowView。为了正确显示,我应该覆盖哪个属性?我认为 ToString() 不是我在这个场合搜索的内容。
猜你喜欢
  • 1970-01-01
  • 2012-09-06
  • 1970-01-01
  • 1970-01-01
  • 2017-04-14
  • 2018-01-03
  • 1970-01-01
  • 2010-11-25
相关资源
最近更新 更多