开发者

Sorting of array in windows phone 7

I am trying to sort data that i retrieved. I have two data time and attached title. I were able to sort the time. But the attached note did not coordinate with the sorted arrangement.

For example, Time -> 10:45AM Attached title -> Homework 8:45AM -> Work

Sorted on time Time 8:45AM Homework 10:50AM Work

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)

    {
        base.OnNavigatedTo(e);
        selectedFolderName = "";

        if (NavigationContext.QueryString.TryGetValue("selectedFolderName", out selectedFolderName))
            selectedFolderName1 = selectedFolderName;



        IsolatedStorageFile myStore = IsolatedStorageFile.GetUserStoreForApplication();
        //For time
        try
        {
            StreamReader readFileTime = new StreamReader(new IsolatedStorageFileStream(selectedFolderName1 + "\\time.Schedule", FileMode.Open, myStore));
            //For title
            StreamReader readFileTitle = new StreamReader(new IsolatedStorageFileStream(selectedFolderName1 + "\\title.Schedule", FileMode.Open, myStore));
            //For category
            StreamReader readFileCategory = new StreamReader(new IsolatedStorageFileStream(selectedFolderName1 + "\\category.Schedule", FileMode.Open, myStore));


            String timeText = readFileTime.ReadLine();
            timeSplit = timeText.Split(new char[] { '^' });
            Array.Sort(timeSplit);

            String titleText = readFileTitle.ReadLine();
            titleSplit = titleText.Split(new char[] { '^' });


            String categoryText = readFileCategory.ReadLine();
            categorySplit = categoryText.Split(new char[] { '^' });

        }
        catch (Exception)
        {
            // noScheduleTxt.Visibility = Visibility.Visible;
        }



开发者_StackOverflow社区        if (scheduleListBox.Items.Count == 0)
        {

            for (int i = 0; i < timeSplit.Length; i++)
            {
                string timeList = timeSplit[i];
                string titleList = titleSplit[i];
                string categoryList = categorySplit[i];

                //Define grid column, size
                Grid schedule = new Grid();
                //Column to hold the time of the schedule
                ColumnDefinition timeColumn = new ColumnDefinition();
                GridLength timeGrid = new GridLength(110);
                timeColumn.Width = timeGrid;
                schedule.ColumnDefinitions.Add(timeColumn);


                //Text block that show the time of the schedule
                TextBlock timeTxtBlock = new TextBlock();
                timeTxtBlock.Text = timeList;
                //Set the alarm label text block properties - margin, fontsize
                timeTxtBlock.FontSize = 28;
                timeTxtBlock.Margin = new Thickness(0, 20, 0, 0);
                //Set the column that will hold the time of the schedule
                Grid.SetColumn(timeTxtBlock, 0);
                schedule.Children.Add(timeTxtBlock);



                //Column to hold the title of the schedule
                ColumnDefinition titleColumn = new ColumnDefinition();
                GridLength titleGrid = new GridLength(300);
                titleColumn.Width = titleGrid;
                schedule.ColumnDefinitions.Add(titleColumn);

                //Text block that show the title of the schedule
                TextBlock titleTxtBlock = new TextBlock();
                titleTxtBlock.Text = titleSplit[i];

                if (titleSplit[i].Length > 15)
                {
                    string strTitle = titleSplit[i].Substring(0, 15) + "....";
                    titleTxtBlock.Text = strTitle;
                }
                else
                {
                    titleTxtBlock.Text = titleSplit[i];
                }
                //Set the alarm label text block properties - margin, fontsize
                titleTxtBlock.FontSize = 28;
                titleTxtBlock.Margin = new Thickness(20, 20, 0, 0);
                //Set the column that will hold the title of the schedule
                Grid.SetColumn(titleTxtBlock, 1);
                schedule.Children.Add(titleTxtBlock);



                //Column 3 to hold the image category of the schedule
                ColumnDefinition categoryImageColumn = new ColumnDefinition();
                GridLength catImgnGrid = new GridLength(70);
                categoryImageColumn.Width = catImgnGrid;
                schedule.ColumnDefinitions.Add(categoryImageColumn);

                //Text block that show the category of the schedule
                TextBlock categoryTxtBlock = new TextBlock();
                categoryTxtBlock.Text = categorySplit[i];

                //set the category image and its properties - margin, width, height, name, background, font size
                Image categoryImage = new Image();
                categoryImage.Margin = new Thickness(-20, 15, 0, 0);
                categoryImage.Width = 50;
                categoryImage.Height = 50;
                if (categoryTxtBlock.Text == "Priority")
                {
                    categoryImage.Source = new BitmapImage(new Uri("/AlarmClock;component/Images/exclamination_mark.png", UriKind.Relative));
                }
                else
                    if (categoryTxtBlock.Text == "Favourite")
                    {
                        categoryImage.Source = new BitmapImage(new Uri("/AlarmClock;component/Images/star_full.png", UriKind.Relative));
                    }


                Grid.SetColumn(categoryImage, 2);
                schedule.Children.Add(categoryImage);

                scheduleListBox.Items.Add(schedule);
            }


        }
    }


The problem is, you are sorting your time array but not your title array. Just create a new class "ScheduleItem" with three properties called Time, Title and Category. Then create a strongtyped List and do your sorting on the list.

Your class should look like this

public class ScheduleItem : IComparable<ScheduleItem>
{
    public DateTime Time { get; set; }
    public string Title { get; set; }
    public string Category { get; set; }


    public int CompareTo(ScheduleItem item)
    {
        return Title.CompareTo(item.Title);
    }
}

After that you can read your values from your files and build up your list like this.

if (scheduleListBox.Items.Count == 0)
{

    List<ScheduleItem> scheduleItems = new List<ScheduleItem>();
    for (int i = 0; i < timeSplit.Length; i++)
    {
        string timeList = timeSplit[i];
        string titleList = titleSplit[i];
        string categoryList = categorySplit[i];

        ScheduleItem item = new ScheduleItem
                                {
                                    Time = DateTime.Parse(timeList),
                                    Title = titleList,
                                    Category = categoryList
                                };
        scheduleItems.Add(item);

    }

    scheduleItems.Sort();
}

And now iterate through your list of ScheduleItems and build your controls. Your code should look something like this

if (scheduleListBox.Items.Count == 0)
{

    List<ScheduleItem> scheduleItems = new List<ScheduleItem>();
    for (int i = 0; i < timeSplit.Length; i++)
    {
        string timeList = timeSplit[i];
        string titleList = titleSplit[i];
        string categoryList = categorySplit[i];

        ScheduleItem item = new ScheduleItem
                                {
                                    Time = DateTime.Parse(timeList),
                                    Title = titleList,
                                    Category = categoryList
                                };
        scheduleItems.Add(item);

    }

    scheduleItems.Sort();

    foreach (ScheduleItem item in scheduleItems)
    {

        //Define grid column, size
        Grid schedule = new Grid();
        //Column to hold the time of the schedule
        ColumnDefinition timeColumn = new ColumnDefinition();
        GridLength timeGrid = new GridLength(110);
        timeColumn.Width = timeGrid;
        schedule.ColumnDefinitions.Add(timeColumn);


        //Text block that show the time of the schedule
        TextBlock timeTxtBlock = new TextBlock();
        timeTxtBlock.Text = item.Time;
        //Set the alarm label text block properties - margin, fontsize
        timeTxtBlock.FontSize = 28;
        timeTxtBlock.Margin = new Thickness(0, 20, 0, 0);
        //Set the column that will hold the time of the schedule
        Grid.SetColumn(timeTxtBlock, 0);
        schedule.Children.Add(timeTxtBlock);



        //Column to hold the title of the schedule
        ColumnDefinition titleColumn = new ColumnDefinition();
        GridLength titleGrid = new GridLength(300);
        titleColumn.Width = titleGrid;
        schedule.ColumnDefinitions.Add(titleColumn);

        //Text block that show the title of the schedule
        TextBlock titleTxtBlock = new TextBlock();
        titleTxtBlock.Text = item.Title;

        if (item.Title.Length > 15)
        {
            string strTitle = item.Title.Substring(0, 15) + "....";
            titleTxtBlock.Text = strTitle;
        }
        else
        {
            titleTxtBlock.Text = item.Title;
        }
        //Set the alarm label text block properties - margin, fontsize
        titleTxtBlock.FontSize = 28;
        titleTxtBlock.Margin = new Thickness(20, 20, 0, 0);
        //Set the column that will hold the title of the schedule
        Grid.SetColumn(titleTxtBlock, 1);
        schedule.Children.Add(titleTxtBlock);



        //Column 3 to hold the image category of the schedule
        ColumnDefinition categoryImageColumn = new ColumnDefinition();
        GridLength catImgnGrid = new GridLength(70);
        categoryImageColumn.Width = catImgnGrid;
        schedule.ColumnDefinitions.Add(categoryImageColumn);

        //Text block that show the category of the schedule
        TextBlock categoryTxtBlock = new TextBlock();
        categoryTxtBlock.Text = item.Category;

        //set the category image and its properties - margin, width, height, name, background, font size
        Image categoryImage = new Image();
        categoryImage.Margin = new Thickness(-20, 15, 0, 0);
        categoryImage.Width = 50;
        categoryImage.Height = 50;
        if (categoryTxtBlock.Text == "Priority")
        {
            categoryImage.Source = new BitmapImage(new Uri("/AlarmClock;component/Images/exclamination_mark.png", UriKind.Relative));
        }
        else
            if (categoryTxtBlock.Text == "Favourite")
            {
                categoryImage.Source = new BitmapImage(new Uri("/AlarmClock;component/Images/star_full.png", UriKind.Relative));
            }


        Grid.SetColumn(categoryImage, 2);
        schedule.Children.Add(categoryImage);
    }

}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜