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

大城市里の小女人 提交于 2020-01-03 00:38:07

问题


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...


回答1:


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.



来源:https://stackoverflow.com/questions/16512893/windows-store-app-writing-sqlite-query-into-the-listviews-textblocks

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!