2

I am trying to creating windows phone 8 project with database (sqlite) techniques

I have tried the following:

1) Download sqlite fie from server & saved it in local app

2) I can also retrieve the values from local sqlite database and displayed in message box by using some sample codes from This Link & some other links too.

But, I am not able to bind that values in listbox.

Here is my code :

XAML code :

   <Grid x:Name="ContentPanel" Grid.RowSpan="2">
        <ListBox Name="scheduleListbox" Margin="5,85,5,60" ItemsSource="{Binding}" SelectionChanged="scheduleListbox_SelectionChanged">
             <ListBox.ItemTemplate>
                <DataTemplate>
                <Grid Height="250" Width="480">
                    <Grid.RowDefinitions>
                        <RowDefinition Height="20"></RowDefinition>
                        <RowDefinition Height="40"></RowDefinition>
                        <RowDefinition Height="*"></RowDefinition>
                        <RowDefinition Height="40"></RowDefinition>
                    </Grid.RowDefinitions>
                    <TextBlock Name="team1Name" Text="{Binding team1_name}" Grid.Row="0"></TextBlock>
                    <TextBlock Name="team2Name" Text="{Binding team2_name}"></TextBlock>
                    <TextBlock Name="venue" Text="{Binding venue}" ></TextBlock>
                </Grid>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
        <toolkit:ListPicker Name="selectTeam" Height="60" ItemsSource="{Binding}" VerticalAlignment="Bottom" Background="Black" FullModeHeader="Select your Team Schedule" Foreground="White" ExpansionMode="FullScreenOnly" Margin="5,0" SelectionChanged="selectTeam_SelectionChanged">
            <toolkit:ListPicker.ItemTemplate>
                <DataTemplate>
                    <StackPanel Name="listpickerStackpannel" >
                        <TextBlock Text="{Binding}" TextAlignment="Center" FontFamily="Times New Roman" FontSize="30"></TextBlock>
                    </StackPanel>
                </DataTemplate>
            </toolkit:ListPicker.ItemTemplate>
            <toolkit:ListPicker.FullModeItemTemplate>
                <DataTemplate>
                    <StackPanel Name="listpickerStackpannel" Margin="10">
                        <TextBlock Text="{Binding}" TextAlignment="Center" FontFamily="Times New Roman" FontSize="30"></TextBlock>
                    </StackPanel>
                </DataTemplate>
            </toolkit:ListPicker.FullModeItemTemplate>
        </toolkit:ListPicker>
    </Grid>

and my CS code is:

     string DB_PATH = Path.Combine(ApplicationData.Current.LocalFolder.Path, "sample.sqlite");
    //SQLite connection
    private SQLiteConnection dbConn;
    private List<string> _source = new List<string>
    {
        "Full Schedule","Afghanistan","Australia","Bangladesh","England","Hong Kong","India","Ireland","Nepal","Netherlands","New Zealand","Pakistan","South Africa","Sri Lanka","UAE","West Indies","Zimbabwe"
    };
    public MainPage1()
    {
        InitializeComponent();
        selectTeam.ItemsSource = _source;
    }

    private void scheduleListbox_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        dbConn = new SQLiteConnection(DB_PATH);
        /// Create the table Task, if it doesn't exist.
        dbConn.CreateTable<iccworldt20_schedule>();
        /// Retrieve the task list from the database.
        List<iccworldt20_schedule> retrievedTasks = dbConn.Query<iccworldt20_schedule>("select * from iccworldt20_schedule").ToList<iccworldt20_schedule>();
        /// Clear the list box that will show all the tasks.
        scheduleListbox.Items.Clear();
        foreach (var t in retrievedTasks)
        {
            MessageBox.Show(t.ToString());
        }
    }
}
public class iccworldt20_schedule
{
    [PrimaryKey, AutoIncrement]
    public int match_id { get; set; }
    public string team1_Name { get; set; }
    public string team2_Name { get; set; }
    public string match_no { get; set; }
    public string group { get; set; }
    public string venue { get; set; }
    public string time { get; set; }
    public string day { get; set; }

    public override string ToString()
    {
        return team1_Name + ":" + team2_Name +venue;
    }
}

Please give some solution that how to retrieve values from sqlite DB and bind its values to listbox.,

2 Answers 2

1

I can't see any code where you are adding data to a ListBox. If you have data pulled from the database, add it to ItemsSource property that's all.

scheduleListbox.ItemsSource = retrievedTasks;

I do not understand why you use ItemsSource="{Binding}" on selectTeam ListPicker when you fill it in the constructor. And why do you use the same to scheduleListbox. See Binding overview

If you youse empty binding syntax: {Binding}. The ListBox inherits the DataContext from a parent element. When the path is not specified, the default is to bind to the entire object.

Sign up to request clarification or add additional context in comments.

Comments

1

i got it., according to "Jan Smuda " reply i found solution for that .,

i removed the binding syntax (ItemsSource="{Binding}") in XAML code for both listpicker and listbox and add itemsSource in code itself., like this

so my XAML code like this:

   <ListBox Name="scheduleListbox" Margin="5,85,5,60" >
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Grid Height="100" Width="480" Margin="0,0,0,5" Background="CadetBlue">
                        <Grid.RowDefinitions>
                        <RowDefinition Height="*"></RowDefinition>
                        <RowDefinition Height="*"></RowDefinition>
                            <RowDefinition Height="*"></RowDefinition>
                        </Grid.RowDefinitions>
                        <TextBlock Text="{Binding team1_Name}" Name="team1Name" Foreground="White"></TextBlock>
                        <TextBlock Grid.Row="1" Text="{Binding team2_Name}" Name="team2Name" Foreground="Red"></TextBlock>
                        <TextBlock Grid.Row="2" Text="{Binding venue}" Name="venue" Foreground="Yellow"></TextBlock>
                    </Grid>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
        <toolkit:ListPicker Name="selectTeam" Height="60" VerticalAlignment="Bottom" Background="Black" FullModeHeader="Select your Team Schedule" Foreground="White" ExpansionMode="FullScreenOnly" Margin="5,0" SelectionChanged="selectTeam_SelectionChanged">
            <toolkit:ListPicker.ItemTemplate>
                <DataTemplate>
                    <StackPanel Name="listpickerStackpannel" >
                        <TextBlock Text="{Binding}" TextAlignment="Center" FontFamily="Times New Roman" FontSize="30"></TextBlock>
                    </StackPanel>
                </DataTemplate>
            </toolkit:ListPicker.ItemTemplate>
            <toolkit:ListPicker.FullModeItemTemplate>
                <DataTemplate>
                    <StackPanel Name="listpickerStackpannel" Margin="10">
                        <TextBlock Text="{Binding}" TextAlignment="Center" FontFamily="Times New Roman" FontSize="30"></TextBlock>
                    </StackPanel>
                </DataTemplate>
            </toolkit:ListPicker.FullModeItemTemplate>
        </toolkit:ListPicker>

and my CS code like this :

    string country = "Full Schedule";
    List<match_schedule> ScheduleList;
    // the local folder DB path
    string DB_PATH = Path.Combine(ApplicationData.Current.LocalFolder.Path, "sample.sqlite");
    //SQLite connection
    private SQLiteConnection dbConn;
    ProgressIndicator _progressIndicator = new ProgressIndicator();
    private List<string> _source = new List<string>
    {
        "Full Schedule","Afghanistan","Australia","Bangladesh","England","Hong Kong","India","Ireland","Nepal","Netherlands","New Zealand","Pakistan","South Africa","Sri Lanka","UAE","West Indies","Zimbabwe"
    };
    public Schedule()
    {
        InitializeComponent();
        selectTeam.ItemsSource = _source;
        Loaded += Schedule_Loaded;
    }

    void Schedule_Loaded(object sender, RoutedEventArgs e)
    {

    }

    private void selectTeam_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        country = (sender as ListPicker).SelectedItem.ToString();
        dbConn = new SQLiteConnection(DB_PATH);
        /// Create the table Task, if it doesn't exist.
        dbConn.CreateTable<match_schedule>();

        if (country == "Full Schedule")
        {
            ScheduleList = dbConn.Query<match_schedule>("select * from tableName").ToList<match_schedule>();
        }
        else
        {
           ScheduleList = dbConn.Query<match_schedule>("select * from tableName where team1_Name=? or team2_Name=?", country).ToList<match_schedule>();
        }
        scheduleListbox.ItemsSource = ScheduleList;         
    }
}
public class match_schedule
{
    [PrimaryKey, AutoIncrement]
    public int match_id { get; set; }
    public string team1_Name { get; set; }
    public string team2_Name { get; set; }
    public string match_no { get; set; }
    public string group { get; set; }
    public string venue { get; set; }
    public string time { get; set; }
    public string day { get; set; }
}

Finally I Got to retrieve column values from my local SQLite Database and i bind it in listbox.,

Lot of thanks to jan Smuda for responding me and thanks to stack overflow also.,

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.