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);
}
}
精彩评论