Мерзавец и работающий над несколькими ответвлениями

Хорошо, я просто сделал это на скорую руку реальное быстрый, и не сделал всей необходимой обработки ошибок и пустой проверки, но она должна дать Вам общее представление и должна быть достаточно для запущения Вас:

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 больше, чем.

42
задан sawa 17 April 2013 в 02:53
поделиться

6 ответов

Обычно отображается элемент управления ради самого себя, и не 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 , если вы хотите отредактировать сообщение фиксации перед исправлением выбранной вишни ошибки).

в ветке разработки) было бы полезно также в другой ветке (например, стабильной ветке). В вашем случае вы должны внести исправление в ветку «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 , если вы хотите отредактировать сообщение фиксации перед исправлением выбранной вишни ошибки).

в ветке разработки) было бы полезно также в другой ветке (например, стабильной ветке). В вашем случае вы должны внести исправление в ветку «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 , если вы хотите отредактировать сообщение фиксации перед исправлением выбранной вишни ошибки).

ветка должна быть также на ветке «эксперимент». Предположим, что это исправление было зафиксировано 'A' (например, 'something', если вы не зафиксировали ничего поверх 'something', но это может быть, например, 'something ~ 2' или 'c84fb911'):

$ git checkout experimental
$ git cherry-pick A

(you можно использовать параметр - отредактировать до git cherry-pick , если вы хотите отредактировать сообщение фиксации перед исправлением выбранной вишни ошибки).

ветка также должна быть на ветке «эксперимент». Допустим, это исправление было зафиксировано 'A' (например, 'something', если вы ничего не зафиксировали поверх 'something', но это может быть, например, 'something ~ 2' или 'c84fb911'):

$ git checkout experimental
$ git cherry-pick A

(you можно использовать параметр - отредактировать в git cherry-pick , если вы хотите отредактировать сообщение фиксации перед исправлением выбранной вишни ошибки).

54
ответ дан 26 November 2019 в 23:53
поделиться

you could:

  • stash or commit the changes you have been working on the experimental branch
  • checkout something
  • (optional) bisect to find the bug
  • commit the changes
  • checkout 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' :)
5
ответ дан 26 November 2019 в 23:53
поделиться

, поскольку ваш экспериментальный содержит функции из something , вы должны выполнить одно из следующих действий:

  • объединить something в экспериментальный после того, как исправите там ошибку.
  • переустановите свой экспериментальный поверх чего-то
2
ответ дан 26 November 2019 в 23:53
поделиться

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.

0
ответ дан 26 November 2019 в 23:53
поделиться

Если вы можете объединиться, сделайте это. Если вы не хотите объединять что-то в другие ветки, исправьте ошибку и выберите «вишенку», которые фиксируются в каждой из других веток.

0
ответ дан 26 November 2019 в 23:53
поделиться

Ваши ветки как-то связаны следующим образом:

master> something> экспериментальный

Это если вы действительно собираетесь объединить что-то в master.

Я бы, если возможно, исправьте его поверх мастера, а затем переустановите остальные поверх мастера. Но мне просто ребазинг нравится. Или вы можете исправить это здесь, а затем слить точно так же

master> something> experimental

, но если что-то является простой веткой темы, я бы не стал этого делать. Похоже, что-то и есть ваш "кандидат в следующий мастер"

0
ответ дан 26 November 2019 в 23:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: