Хорошо, я просто сделал это на скорую руку реальное быстрый, и не сделал всей необходимой обработки ошибок и пустой проверки, но она должна дать Вам общее представление и должна быть достаточно для запущения Вас:
public static class DataTableExtensions
{
public static DataView ApplySort(this DataTable table, Comparison<DataRow> comparison)
{
DataTable clone = table.Clone();
List<DataRow> rows = new List<DataRow>();
foreach (DataRow row in table.Rows)
{
rows.Add(row);
}
rows.Sort(comparison);
foreach (DataRow row in rows)
{
clone.Rows.Add(row.ItemArray);
}
return clone.DefaultView;
}
}
Использование:
DataTable table = new DataTable();
table.Columns.Add("IntValue", typeof(int));
table.Columns.Add("StringValue");
table.Rows.Add(11, "Eleven");
table.Rows.Add(14, "Fourteen");
table.Rows.Add(10, "Ten");
table.Rows.Add(12, "Twelve");
table.Rows.Add(13, "Thirteen");
//Вид StringValue:
DataView sorted = table.ApplySort((r, r2) =>
{
return ((string)r["StringValue"]).CompareTo(((string)r2["StringValue"]));
});
Результат:
11 Одиннадцать
14 Четырнадцать
10 Десять
13 Тринадцать
12 Двенадцать
//Вид IntValue:
DataView sorted = table.ApplySort((r, r2) =>
{
return ((int)r["IntValue"]).CompareTo(((int)r2["IntValue"]));
});
Результат:
10 Десять
11 Одиннадцать
13 Тринадцать
12 Двенадцать
14 Четырнадцать
РЕДАКТИРОВАНИЕ: Измененный это на дополнительный метод.
Теперь в Вашей Лямбде, (или можно создать полноценный Метод сравнения) можно сделать любой вид пользовательской логики сортировки, в которой Вы нуждаетесь. Помните,-1 меньше, чем, 0 равно, и 1 больше, чем.
Обычно отображается элемент управления ради самого себя, и не t отражают исходные данные. Например, кнопка
не будет привязана к бизнес-объекту - она существует исключительно для того, чтобы по ней можно было щелкнуть. Однако ContentControl
или ListBox
обычно появляются так, чтобы они могли представлять данные для пользователя.
A DataTemplate
, таким образом, используется для визуального представления структура для базовых данных, в то время как ControlTemplate
не имеет ничего общего с базовыми данными и просто предоставляет визуальную компоновку для самого элемента управления.
A ControlTemplate
обычно будет содержать только TemplateBinding
выражений, которые возвращаются к свойствам самого элемента управления, а DataTemplate
будет содержать стандартные выражения привязки,
Решение Выбор вишни полезно, если вы заметили позже , что созданное вами исправление ошибки (например, в ветке разработки) будет полезно также на другая ветка (например, стабильная ветка). В вашем случае вы должны внести исправление в ветку «something»:
$ git checkout something
[edit, edit, edit]
$ git commit
$ git checkout experimental
Затем вы заметили, что исправление, внесенное вами в ветке «something», должно быть также и в ветке «Experimenta». Предположим, что это исправление было зафиксировано 'A' (например, 'something', если вы не зафиксировали ничего поверх 'something', но это может быть, например, 'something ~ 2' или 'c84fb911'):
$ git checkout experimental
$ git cherry-pick A
(you можно использовать параметр - отредактировать
в git cherry-pick , если вы хотите отредактировать сообщение фиксации перед исправлением выбранной вишни ошибки).
$ git checkout something
[edit, edit, edit]
$ git commit
$ git checkout experimental
Затем вы заметили, что исправление, внесенное вами в ветке «something», должно быть также и в ветке «Experimenta». Допустим, это исправление было зафиксировано 'A' (например, 'something', если вы ничего не зафиксировали поверх 'something', но это может быть, например, 'something ~ 2' или 'c84fb911'):
$ git checkout experimental
$ git cherry-pick A
(you можно использовать параметр - отредактировать
до git cherry-pick , если вы хотите отредактировать сообщение фиксации перед исправлением выбранной вишни ошибки).
$ git checkout something
[edit, edit, edit]
$ git commit
$ git checkout experimental
Затем вы заметили, что исправление, внесенное вами в ветке «something», должно быть также и в ветке «Experimenta». Предположим, что это исправление было зафиксировано 'A' (например, 'something', если вы не зафиксировали ничего поверх 'something', но это может быть, например, 'something ~ 2' или 'c84fb911'):
$ git checkout experimental
$ git cherry-pick A
(you можно использовать параметр - отредактировать
до git cherry-pick , если вы хотите отредактировать сообщение фиксации перед исправлением выбранной вишни ошибки).
$ git checkout experimental
$ git cherry-pick A
(you можно использовать параметр - отредактировать
до git cherry-pick , если вы хотите отредактировать сообщение фиксации перед исправлением выбранной вишни ошибки).
$ git checkout experimental
$ git cherry-pick A
(you можно использовать параметр - отредактировать
в git cherry-pick , если вы хотите отредактировать сообщение фиксации перед исправлением выбранной вишни ошибки).
you could:
stash
or commit
the changes you have been working on the experimental
branchcheckout something
bisect
to find the bugcommit
the changescheckout experimental
and then:
rebase something
if you want a clean commit graph (if you expose this repository and you care about that)or:
merge something
if you don't care about 'presentation' :), поскольку ваш экспериментальный содержит функции из something , вы должны выполнить одно из следующих действий:
If you don't progress in 'master' too much, just switch back to the experimental and do 'git merge master'. If you do, I think the 'git cherry-pick' command is your friend.
Если вы можете объединиться, сделайте это. Если вы не хотите объединять что-то в другие ветки, исправьте ошибку и выберите «вишенку», которые фиксируются в каждой из других веток.
Ваши ветки как-то связаны следующим образом:
master> something> экспериментальный
Это если вы действительно собираетесь объединить что-то в master.
Я бы, если возможно, исправьте его поверх мастера, а затем переустановите остальные поверх мастера. Но мне просто ребазинг нравится. Или вы можете исправить это здесь, а затем слить точно так же
master> something> experimental
, но если что-то является простой веткой темы, я бы не стал этого делать. Похоже, что-то и есть ваш "кандидат в следующий мастер"