Alasse
Alasse

Reputation: 361

Windows Store App writing sqlite query into the listview's textblocks

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

Answers (1)

Kenneth
Kenneth

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

Related Questions