Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.07.2018, 11:49   #1
ольгаг
Форумчанин
 
Регистрация: 22.02.2010
Сообщений: 325
По умолчанию Сортировка данных с привязкой к полям

Здравствуйте Уважаемые программисты!

Код ниже позволяет добавлять и удалять в checkedListBox-е строки с привязанными свойствами Value1,Value2,Value3 (которые в свою очередь связаны с тремя label-ми). Подскажите пожалуйста, как исправить код, чтобы после добавления и удаления строк происходила их сортировка по алфавиту в checkedListBox-е с сохранением привязанных значений?
Заранее спасибо!

Код:
using System;
using System.ComponentModel;
using System.Linq;
using System.Windows.Forms;

namespace BindingsDemo
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            checkedListBox1.DataSource = VM.DataSource;
            checkedListBox1.DisplayMember = "Name";
            var nullValue = new Person { Name = "null", Value1 = string.Empty, Value2 = string.Empty, Value3 = string.Empty };
            checkedListBox1.DataBindings.Add("SelectedItem", VM, "Focused", false, DataSourceUpdateMode.OnPropertyChanged, nullValue);
            label1.DataBindings.Add("Text", VM.DataSource, "Value1", false, DataSourceUpdateMode.OnPropertyChanged, nullValue);
            label2.DataBindings.Add("Text", VM.DataSource, "Value2", false, DataSourceUpdateMode.OnPropertyChanged, nullValue);
            label3.DataBindings.Add("Text", VM.DataSource, "Value3", false, DataSourceUpdateMode.OnPropertyChanged, nullValue);
        }

        private readonly PersonCollectionVM VM = new PersonCollectionVM();

        private void checkedListBox1_SelectedValueChanged(object sender, EventArgs e)
        {
            VM.Focused = checkedListBox1.SelectedItem as Person;
        }

        private void buttonAddNew_Click(object sender, EventArgs e)
        {
            var newval = VM.DataSource.AddNew();
            newval.Name = "New name " + VM.DataSource.Count;
            newval.Value1 = newval.Name + "1";
            newval.Value2 = newval.Name + "2";
            newval.Value3 = newval.Name + "3";
            VM.Focused = newval;
        }

        private void buttonRemove_Click(object sender, EventArgs e)
        {
            VM.DataSource.Remove(VM.Focused);
        }
    }

    internal class PersonCollectionVM : INotifyPropertyChanged
    {
        public PersonCollectionVM()
        {
            DataSource = new BindingList< Person >( new[] { new Person { Name = "Вася", Value1 = "1", Value2 = "2", Value3 = "3" }, 
                new Person { Name = "Вася", Value1 = "12", Value2 = "22", Value3 = "32" } }.ToList() );
            Focused = DataSource[ 0 ];
        }

        private Person focused;

        public BindingList< Person > DataSource { get; set; }

        public Person Focused
        {
            set
            {
                if ( Equals( value, focused ) )
                    return;
                focused = value;
                OnPropertyChanged( "Focused" );
            }
            get
            {
                return focused;
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;

        protected virtual void OnPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    }

    internal class Person
    {
        public string Name { set; get; }

        public string Value1 { get; set; }
        public string Value2 { get; set; }
        public string Value3 { get; set; }
    }
}
ольгаг вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Одновременная сортировка по 2 полям conflictogen PHP 6 19.08.2015 22:24
Сортировка по не текстовым полям Armageddets БД в Delphi 1 10.05.2015 12:11
сортировка по вычислительным полям bratcho БД в Delphi 1 12.02.2014 14:00
Сортировка по полям связи A_r_r_a_y БД в Delphi 8 25.04.2009 21:11
Сортировка по вычисляемым полям unit-85 SQL, базы данных 2 02.04.2009 12:05