I see this is a common problem as I have went over many posts but can't figure out solution for my one. I'm migrating from WinForm
s to WPF
and have a DataSet
that needs to be bind to ListView
. I was trying to follow this solution: https://stackoverflow.com/a/5880315/2920121 but without success.
Please note I'm new to C# and .NET.
Here's my WPF and WinForms code:
WinForms:
CmdStrFg = "SELECT dbname, Version, UpdateTime FROM(...)as tbl2 ";
CmdStrBlm = "SELECT dbname, Version, UpdateTime FROM (...)as tbl1 ";
CmdStrPay = "SELECT dbname, Version, UpdateTime FROM(...)as tbl3 ";
CmdStrTran = "SELECT dbname, Version, UpdateTime FROM(...)as tbl4";
DataSet ds = new DataSet();
ds.Tables.Add(GetDataFromDatabase(GetConnectionString(conStringBlm), CmdStrBlm));
ds.Tables.Add(GetDataFromDatabase(GetConnectionString(conStringFg), CmdStrFg));
ds.Tables.Add(GetDataFromDatabase(GetConnectionString(conStringPay), CmdStrPay));
ds.Tables.Add(GetDataFromDatabase(GetConnectionString(conStringTrans), CmdStrTran));
DataTable dtAll = ds.Tables[0].Copy();
for (var i = 1; i < ds.Tables.Count; i++) // this did the trick for
{ // for me with WinForms
dtAll.Merge(ds.Tables[i]);
}
dataGridView1.AutoGenerateColumns = true;
dataGridView1.DataSource = dtAll;
// resize column 3 to fit the window content
WPF.xaml:
<ListView ItemsSource="{Binding DbVersions}" DockPanel.Dock="Top">
<ListView.View>
<GridView>
<GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}"/>
<GridViewColumn Header="Version" DisplayMemberBinding="{Binding Version}" Width="60"/>
<GridViewColumn Header="Last Updated" DisplayMemberBinding="{Binding LastUpdated}" Width="140"/>
</GridView>
</ListView.View>
</ListView>
I was trying to use ObservableCollection
with class object but not got far.
Any help will be much appreciated.
Simple example:
You have your ListView bounded to persons which is defined in code behind like this:
And this is the Person class:
So you have to use that
ObservableCollection<Person>
instead of creating a DataTable with columns and rows as the Source of the ListView.Some hints.. ObservableCollection will notify the View when items are added or removed and that INotifyPropertyChanged interface with its PropertyChanged event will notify the GUI when some properties of the items existing in the collection are changed.