ilostmyid2 Ответов: 1

Как заставить элемент управления следовать за своим источником данных?


В начале, когда я назначаю свою коллекцию источнику данных элемента управления, он следует за тем, что находится в коллекции. Во время выполнения моей программы, когда коллекция изменяется, я не вижу никаких изменений в содержимом элемента управления. Как я могу заставить элемент управления следить за последними изменениями коллекции?

Что я уже пробовал:

Единственный способ, который я знаю, - это установить DataSource в null, а затем снова установить его в коллекцию! Но я думаю, что это может быть не очень хорошая идея.

Maciej Los

Вы имеете в виду пользовательский элемент управления (user control) или стандартный элемент управления windows form?

ilostmyid2

это действительно элемент управления RadListView

1 Ответов

Рейтинг:
10

OriginalGriff

Попробуйте использовать BindingList:

class MyClass
    {
    public string Str { get; set; }
    public int I { get; set; }
    }
BindingList<MyClass> myBindingList = new BindingList<MyClass>();
private void button1_Click(object sender, EventArgs e)
    {
    myBindingList.Add(new MyClass() { Str = "s1", I = 100 });
    myBindingList.Add(new MyClass() { Str = "s2", I = 101 });
    myBindingList.Add(new MyClass() { Str = "s3", I = 102 });
    myBindingList.Add(new MyClass() { Str = "s4", I = 103 });
    myBindingList.Add(new MyClass() { Str = "s5", I = 104 });
    MyDataGridView.DataSource = myBindingList;
    }
private void button2_Click(object sender, EventArgs e)
    {
    myBindingList.Add(new MyClass() { Str = "sX", I = 666 });
    }
Каждый раз, когда вы нажимаете кнопку Button2, строка будет добавлена в datagridview.


ilostmyid2

спасибо. есть ли какой-нибудь другой способ, кроме использования BindingList? действительно, источник данных исходит от веб-сервиса, размещенного на linux. не могу заставить его вернуть список привязок.

OriginalGriff

Что он возвращает? Веб - служба обычно возвращает либо XML, либо JSON, и вы можете обрабатывать их во что угодно!

Вы можете использовать BindingSource в качестве посредника (хотя мне это и не нужно) или любую коллекцию с реализацией IBindingList напрямую.

ilostmyid2

мы программируем на C# winforms, доступ к веб-сервисам осуществляется через NuSoap в Linux. возвращаемое значение веб-сервиса представляет собой простую структуру.

OriginalGriff

Итак, ваш веб - сервис возвращает SOAP-сообщение-если это структура одного элемента, то в чем проблема с использованием BindingList в качестве источника данных? Вы, вероятно, используете коллекцию какой-то формы в настоящее время, или вы добавляете их непосредственно во внутреннюю коллекцию вашего элемента управления?

ilostmyid2

нет, это массив, который возвращается, и я не изменяю его и не заполняю другую коллекцию или массив на его основе. я просто использую его, когда он возвращается. Я попробую BindingList для этой цели. спасибо. Я мало что знаю об этом, но надеюсь, что добьюсь успеха.