我有一种情况,我从数据库中查询数据并用它填充DataTable。然后将DataTable绑定到ItemsControl无法正确更新。问题的根源似乎与从Firebird数据库中提取数据有关,但我无法解决这可能有多重要的问题。是否可以通过实现DbDataAdapter来创建与WPF绑定不兼容的DataColumn对象?
这里有更详细的信息。 ItemsControl很简单:
<ItemsControl ItemsSource="{Binding COEStudents}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions><ColumnDefinition/><ColumnDefinition/><ColumnDefinition/><ColumnDefinition/></Grid.ColumnDefinitions>
<TextBox Text="{Binding [Foo]}" Grid.Column="0"/>
<TextBox Text="{Binding [Foo]}" Grid.Column="1"/>
<TextBox Text="{Binding [LastName]}" Grid.Column="2"/>
<TextBox Text="{Binding [LastName]}" Grid.Column="3"/>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
My Window.DataContext设置为具有如下属性的对象:
public DataView COEStudents { get { return coeStudTable.DefaultView; } }
coeStudTable的填充方式如下:
FirebirdSql.Data.FirebirdClient.FbConnection conn=new FirebirdSql.Data.FirebirdClient.FbConnection(
@"dialect=3;charset=NONE;connection lifetime=0;connection timeout=15;pooling=True;packet size=8192;initial catalog=localhost:c:\\Users\\kdonn\\DBs\\NE\\MIS2000.fdb;server type=Default;user id=fubar;password=blah");
FirebirdSql.Data.FirebirdClient.FbDataAdapter adapter=
new FirebirdSql.Data.FirebirdClient.FbDataAdapter( "select first 3 LastName from Student", conn);
adapter.Fill(coeStudTable);
coeStudTable.Columns.Add("Foo", typeof(string));
foreach (DataRow r in coeStudTable.Rows)
r["Foo"]=r["LastName"];
ItemsControl显示三行数据,每行数据四份。当我更改第0列和制表符中的值时,第1列中的值显示了预期的更改值。当我更改第2列和制表符中的值时,第3列中的值不会更改。
如果我按照以下方式从Firebird切换到SQL Server以获取数据,那么一切正常:
System.Data.SqlClient.SqlDataAdapter adapter=
new System.Data.SqlClient.SqlDataAdapter( "select top 3 LastName from HRRM",
@"Data Source=localhost\SQLEXPRESS;Initial Catalog=Viewpoint2;Integrated Security=True");
这似乎表明FbDataAdapter以某种方式创建了与WPF数据绑定不搭配的DataColumn对象,但这怎么可能呢?