Home All Groups Group Topic Archive Search About

Wpf/net 3.5 /VS2008 - Binding to Ado.net dataTable problem

Author
21 Nov 2007 9:59 PM
Rolf Welskes
Hello,
because there are no managed news group for window presentation foundation
and one
has told me I can use this, here my problem:

Here a litte code with a sample program - simple program which binds to an
ado.net table:

<Window x:Class="Test03.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:my="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration"    xmlns:form="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"    Title="Window1" Height="414" Width="519">    <Grid Name="grid" Background="LightGray" Height="355" Width="471">  <Grid.Resources>   <ObjectDataProvider x:Key="dp" />  </Grid.Resources>  <ListBox Margin="12,17,0,0" Name="lbx01" ItemsSource="{BindingSource={StaticResource dp}}"   IsSynchronizedWithCurrentItem="True" DisplayMemberPath="Row[0]"HorizontalAlignment="Left"   Width="143" Height="78" VerticalAlignment="Top" />  <TextBox Height="23" Margin="183,17,168,0" Name="tx01"VerticalAlignment="Top"   Text="{Binding Source={StaticResource dp}, Path=Row[0],UpdateSourceTrigger=PropertyChanged}"/>  <TextBox Height="23" Margin="183,48,168,0" Name="tx02"VerticalAlignment="Top"   Text="{Binding Source={StaticResource dp}, Path=Row[1],UpdateSourceTrigger=PropertyChanged}"/>  <Button Height="23" Margin="183,80,168,0" Name="btnAdd"VerticalAlignment="Top" Click="btnAdd_Click">Add</Button>  <my:WindowsFormsHost Margin="12,152,98,82" Name="windowsFormsHost1"  >   <form:DataGridView x:Name="dataGridView"/>  </my:WindowsFormsHost> </Grid></Window>using System;using System.Data;using System.Collections.Generic;using System.Linq;using System.Text;using System.Windows;using System.Windows.Forms;using System.Windows.Controls;using System.Windows.Data;using System.Windows.Documents;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Imaging;using System.Windows.Navigation;using System.Windows.Shapes;namespace Test03{    /// <summary>    /// Interaction logic for Window1.xaml    /// </summary>    public partial class Window1 : Window    {        DataSet ds;        CollectionViewSource cvs;        public Window1()        {            InitializeComponent();            ds = new DataSet();            DataTable table = new DataTable();            DataColumn dcName = new DataColumn("Name");            DataColumn dcFirstName = new DataColumn("FirstName");            table.Columns.Add(dcName);            table.Columns.Add(dcFirstName);            ds.Tables.Add(table);            DataRow row = table.NewRow();            row[0] = "Smith";            row[1] = "John";            table.Rows.Add(row);            row = table.NewRow();            row[0] = "Sinclaire";            row[1] = "Jill";            table.Rows.Add(row);            DataView dv = new DataView();            dv.Table = table;            cvs = new CollectionViewSource();            cvs.Source = dv;            ObjectDataProvider dp =(ObjectDataProvider)grid.FindResource("dp");            dp.ObjectInstance = cvs.View;            dataGridView.DataSource = dv;        }        private void btnAdd_Click(object sender, RoutedEventArgs e)        {            BindingListCollectionView bcv =(BindingListCollectionView)cvs.View;            DataView dvx = (DataView)bcv.SourceCollection;            DataRowView drv = dvx.AddNew();            drv[0] = "new name";            drv[1] = "new firstName";        }    }}Run the program and at the bottom in the DataGridView add a new line forexampleas Name aaa as FirstName bbb now change to the line over the new line to addthe record.You get an FatalExceptionEngineError.Now restart the program.Click the Add Button, a record is added. Now click the Add Button again.Now you get again a FatalExceptionEngineError.So you can not add records in DataGridView (WindowsForms) and you cannot addrecordsdirectly with a button (WPF).Thank you for any help.Rolf Welskes

Author
22 Nov 2007 1:09 AM
Rolf Welskes
Hello,
as I now see, the code text look awful.
If it is not usable I would send it again.

Thank you.
Rolf Welskes
Author
22 Nov 2007 10:15 AM
Walter Wang [MSFT]
Hi Rolf,

I've reproduced the issue using following simplified code:

            DataTable dt = new DataTable();
            dt.Columns.Add("foo");
            dt.Rows.Add("bar");
            DataView dv = new DataView(dt);
            CollectionViewSource cvs = new CollectionViewSource();
            cvs.Source = dv;
            dv.AddNew();
            dv.AddNew();

This is probably related to how DataView internally organize the data:
until you call DataRowView.EndEdit(), the data is not added to the
underlying DataTable. If you try to add the data to the underlying
DataTable directly, then it will be fine. Anyway, I will forward this issue
to WPF team to see if they could give more information.


Regards,
Walter Wang (waw***@online.microsoft.com, remove 'online.')
Microsoft Online Community Support

==================================================
When responding to posts, please "Reply to Group" via your newsreader so
that others may learn and benefit from your issue.
==================================================

This posting is provided "AS IS" with no warranties, and confers no rights.
Author
24 Nov 2007 1:53 AM
Rolf Welskes
Hello,
thank you,
but the problem is,
if you use the DataGridView of windows forms (interop with wpf), and enter a
new record
it make also an dv.AddNew().
But here it is not possible to make a work a round because it's the
datagridview-libary-code which makes
the steps.
Thank you
Rolf Welskes

""Walter Wang [MSFT]"" <waw***@online.microsoft.com> schrieb im Newsbeitrag
Show quote
news:EJb1uCPLIHA.4200@TK2MSFTNGHUB02.phx.gbl...
> Hi Rolf,
>
> I've reproduced the issue using following simplified code:
>
>            DataTable dt = new DataTable();
>            dt.Columns.Add("foo");
>            dt.Rows.Add("bar");
>            DataView dv = new DataView(dt);
>            CollectionViewSource cvs = new CollectionViewSource();
>            cvs.Source = dv;
>            dv.AddNew();
>            dv.AddNew();
>
> This is probably related to how DataView internally organize the data:
> until you call DataRowView.EndEdit(), the data is not added to the
> underlying DataTable. If you try to add the data to the underlying
> DataTable directly, then it will be fine. Anyway, I will forward this
> issue
> to WPF team to see if they could give more information.
>
>
> Regards,
> Walter Wang (waw***@online.microsoft.com, remove 'online.')
> Microsoft Online Community Support
>
> ==================================================
> When responding to posts, please "Reply to Group" via your newsreader so
> that others may learn and benefit from your issue.
> ==================================================
>
> This posting is provided "AS IS" with no warranties, and confers no
> rights.
>
>
Author
26 Nov 2007 2:53 AM
Walter Wang [MSFT]
Hi Rolf,

Thanks for your update.

I'm reported this issue to product group. I'll keep you posted.


Regards,
Walter Wang (waw***@online.microsoft.com, remove 'online.')
Microsoft Online Community Support

==================================================
When responding to posts, please "Reply to Group" via your newsreader so
that others may learn and benefit from your issue.
==================================================

This posting is provided "AS IS" with no warranties, and confers no rights.
Author
28 Nov 2007 6:29 AM
Walter Wang [MSFT]
Hi Rolf,

We have tracked down the issue, it's related to ADO.NET DataView will raise
ListChanged(ItemAdded) event twice (one with AddNew, one with EndEdit --
implicitly called by AddNew internally).

Thanks for your great feedback and sorry for the inconvenience caused.


Regards,
Walter Wang (waw***@online.microsoft.com, remove 'online.')
Microsoft Online Community Support

==================================================
When responding to posts, please "Reply to Group" via your newsreader so
that others may learn and benefit from your issue.
==================================================

This posting is provided "AS IS" with no warranties, and confers no rights.

AddThis Social Bookmark Button