Reputation: 361
i am developing windows store application. I am using sqlite database and i want to put the result of select query into listview. My listview has grids, and textboxes inside these grids. But however i cannot target these textboxes in c# when i gave name to them. Here is the code sample from project: First sqlite query:
private void Page_Loaded(object sender, RoutedEventArgs e)
{
string DBPath = string.Empty;
DBPath = Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, "mydb.s3db");
using (var db= new SQLite.SQLiteConnection(DBPath))
{
var query= db.Table<company>();
var result= query.ToList();
foreach( var x in result )
{
company frm= new company();
//addition to listview...
}
}
}
Everything works perfectly above except typing into listview. I have tested it with textblocks outside the listview.
and xaml:
<ListView Name="lv" Grid.Column="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="10,10,10,10" Grid.Row="3" Grid.RowSpan="11" Grid.ColumnSpan="8">
<ListView.HeaderTemplate>
<DataTemplate>
<Grid Loaded="gHeader_Loaded">
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<TextBlock Grid.Row="2" Grid.Column="0" Text="company no" FontSize="25" HorizontalAlignment="Center" VerticalAlignment="Center"/>
<TextBlock Grid.Row="2" Grid.Column="1" Text="company name" FontSize="25" HorizontalAlignment="Center" VerticalAlignment="Center"/>
<TextBlock Grid.Row="2" Grid.Column="2" Text="phone" FontSize="25" HorizontalAlignment="Center" VerticalAlignment="Center"/>
<TextBlock Grid.Row="2" Grid.Column="3" Text="fax" FontSize="25" HorizontalAlignment="Center" VerticalAlignment="Center"/>
<TextBlock Grid.Row="2" Grid.Column="4" Text="address" FontSize="25" HorizontalAlignment="Center" VerticalAlignment="Center"/>
<TextBlock Grid.Row="2" Grid.Column="5" Text="state" FontSize="25" HorizontalAlignment="Center" VerticalAlignment="Center"/>
<TextBlock Grid.Row="2" Grid.Column="6" Text="city" FontSize="25" HorizontalAlignment="Center" VerticalAlignment="Center"/>
<ComboBox Grid.Row="2" Grid.Column="7" HorizontalAlignment="Center" VerticalAlignment="Center">
<ComboBoxItem Content="test1"></ComboBoxItem>
<ComboBoxItem Content="test2"></ComboBoxItem>
<ComboBoxItem Content="test3"></ComboBoxItem>
<ComboBoxItem Content="test4"></ComboBoxItem>
<ComboBoxItem Content="test5"></ComboBoxItem>
</ComboBox>
</Grid>
</DataTemplate>
</ListView.HeaderTemplate>
<ListView.ItemTemplate>
<DataTemplate>
<Grid Loaded="gHeader_Loaded">
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<TextBlock x:Name="test" Grid.Row="2" Grid.Column="0" Text="" FontSize="25" HorizontalAlignment="Center" VerticalAlignment="Center"/>
<TextBlock Grid.Row="2" Grid.Column="1" Text="" FontSize="25" HorizontalAlignment="Center" VerticalAlignment="Center"/>
<TextBlock Grid.Row="2" Grid.Column="1" Text="" FontSize="25" HorizontalAlignment="Center" VerticalAlignment="Center"/>
<TextBlock Grid.Row="2" Grid.Column="1" Text="" FontSize="25" HorizontalAlignment="Center" VerticalAlignment="Center"/>
<TextBlock Grid.Row="2" Grid.Column="2" Text="" FontSize="25" HorizontalAlignment="Center" VerticalAlignment="Center"/>
<TextBlock Grid.Row="2" Grid.Column="3" Text="" FontSize="25" HorizontalAlignment="Center" VerticalAlignment="Center"/>
<TextBlock Grid.Row="2" Grid.Column="4" Text="" FontSize="25" HorizontalAlignment="Center" VerticalAlignment="Center"/>
<TextBlock Grid.Row="2" Grid.Column="5" Text="" FontSize="25" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
Sorry for the long post, i wanted to give detailed information about the program then maybe you can see what went wrong. I would appreciate any help/feedback on this.
My regards...
Upvotes: 1
Views: 1037
Reputation: 28747
You need to use databinding with the ListView.
First bind your collection to the ListView like this:
private void Page_Loaded(object sender, RoutedEventArgs e)
{
** snip **
using (var db= new SQLite.SQLiteConnection(DBPath))
{
var query= db.Table<company>();
lv.ItemsSource = query.ToList();
}
}
After that you can bind inside the datatemplate to the properties on your object. Let's suppose your company-class is defined like this:
public class Company
{
public string Name{get; set;}
}
Then you can do this inside your ItemTemplate:
<ListView.ItemTemplate>
<DataTemplate>
<Grid Loaded="gHeader_Loaded">
<Grid.ColumnDefinitions>
** snip **
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
** snip **
</Grid.RowDefinitions>
<TextBlock Grid.Row="2" Grid.Column="0" Text="{Binding Name}" />
** snip **
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
When rendering each item, it will look at the current instance (of type company
), extract the Name
-property and put it as the value of the TextBlock
.
Upvotes: 1