Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как перезагрузить из DataSource в ДатаГриде? 
:(
    Опции темы
St33l
Дата 5.10.2009, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 16.6.2007

Репутация: нет
Всего: нет



Такая проблема: есть textbox. пользователь вводит в него некоторое числовое значение. это числовое значение присваивается некотрому объекту, который выступает в качестве датасорса для таблицы. В зависимости от значения соответственно в таблице тоже меняются числа.
а проблема вот в чем: когда я ввожу какое-нибудь число в текстбокс и жму обновить, то в таблице ничего не меняется, но достаточно скроллбаром (таблица длинная) утащить ячейку за поле видимости и притащить обратно, как я вижу новое значение.
по кнопке обновить идет просто присваивание датасорса таблице.

как обойти это? может какой-то метод есть, а я не знаю )
PM   Вверх
jonie
Дата 5.10.2009, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 5
Всего: 118



вам нужно в вашем объекте реализовать INotifyPropertyChanged.
пример в аттаче.

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  WindowsFormsApplication4.rar 9,60 Kb


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
St33l
Дата 6.10.2009, 08:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 16.6.2007

Репутация: нет
Всего: нет



как должен работать пример? я вводу в текстбокс значение, щелкаю на таблицу и там оно обновляется.
после того, как я из кода вырезал упоминания о INotifyPropertyChanged и т.п., то работа не изменилась.
PM   Вверх
jonie
Дата 6.10.2009, 09:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 5
Всего: 118



St33l, просто я привязал к одному BindingSource-у, привяжите к двум разным BindingSource-ам грид и тексто бокс и всё будет как у вас.
Обновленный пример в аттаче.

(переходите фокусом ввода в другой контрол, не в грид - иначе грид перезапросит данные)


UPD:
Впрочем и предыдущий пример работает, если вы будете ставить НЕ на грид фокус (добавьте еще ченить в форму и попробуйте)

Это сообщение отредактировал(а) jonie - 6.10.2009, 09:44


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
St33l
Дата 8.10.2009, 09:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 16.6.2007

Репутация: нет
Всего: нет



чет не то у меня. смотрите, как выглядит в реале моя форма:

user posted image

1. В программе есть 5 объектов (А-E класса Shihta (из них 1 наследник ее с перегруженным свойством))
2. Есть 2 List-а. lstShihtatmp и lstShihta. В певром находятся все 5 этих объектов, а во втором 2-х из них нет (не нужны просто).
3. Первая таблица черпает данные из lstShihtatmp, а вторая lstShihta (через биндингсорсы этих листов, 2 биндинга выходит).

Мои затруднения:
Видите колонку П.П.П.? Рассмотрим ПУТ и ЖРС. Когда я меняю значение П.П.П. у ПУТ, то автоматически пересчитывается (в ручную не вводится) значение П.П.П, у ЖРС. Я знаю, что оно пересчиталось, но визуально этого не вижу, пока не щелкну на эту ячейку или не уведу скроллом ячейку из поля видимости. Почему так происходит и как исправить?

Это сообщение отредактировал(а) St33l - 8.10.2009, 09:25
PM   Вверх
jonie
Дата 8.10.2009, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 5
Всего: 118



St33l, а я грю что надо наследоваться от нужного.
Кроме того List<T> также не наследует INotifyPropertyChanged - используйте BindingList<T>, в item-ы которого должны быть запиханы также классы, наследованные от INotifyPropertyChanged.

И воообще при объяснении наследования - сделайте диаграмму, на слух тяжело воспринимать.


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
St33l
Дата 8.10.2009, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 16.6.2007

Репутация: нет
Всего: нет



1. изменил List на BindingList
2. Класс Shihta изменил как в примере:
Код

public class Shihta : INotifyPropertyChanged
{
        public event PropertyChangedEventHandler PropertyChanged;

        protected double _PPP;
        public virtual double PPP
        {
            get { return _PPP; }
            set
            {
                if (value < 0) throw new ArgumentException("Ошибка ввода значения параметра", "Потери при прокаливании");
                if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs("PPP"));
                else _PPP = value;
            }
        }
}


Теперь после ввода в ячейку П.П.П. и выхода из нее ее значение тут же возвращается на старое. Это только для П.П.П., для других такое не происходит, потому в классе для них ничего не менял.
PM   Вверх
St33l
Дата 8.10.2009, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 16.6.2007

Репутация: нет
Всего: нет



виноват, нашел ошибку в коде выше. сейчас так:

Код

public class Shihta : INotifyPropertyChanged
{
        public event PropertyChangedEventHandler PropertyChanged;

        protected double _PPP;
        public virtual double PPP
        {
            get { return _PPP; }
            set
            {
                if (value < 0) throw new ArgumentException("Ошибка ввода значения параметра", "Потери при прокаливании");
                else _PPP = value;
                if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs("PPP"));
            }
        }
}


Ничего не сбрасывает. но после ввода числа в П.П.П. например ПУТа, то значение П.П.П, для ЖРМ пересчитывается, но все так же не отображается, пока не кликнешь в ячейку или не проскроллить.
PM   Вверх
uranpro
Дата 8.10.2009, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 571
Регистрация: 7.5.2008
Где: Moscow city

Репутация: нет
Всего: 1



А нельзя самому обновить ее ? задать значение, примерно:
Код

GV.Rows[GV.SelectedIndex].Cells["ППП"] = val



--------------------
I want a perfect soul
PM MAIL ICQ   Вверх
St33l
Дата 8.10.2009, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 16.6.2007

Репутация: нет
Всего: нет



Не, оно вычисляемое. Зависит от того, что ввести в п.п.п. пут
PM   Вверх
jonie
Дата 8.10.2009, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 5
Всего: 118



St33l, сделайте и выложите минимальный пример. У вас где-то 100% косяк)


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
St33l
Дата 9.10.2009, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 16.6.2007

Репутация: нет
Всего: нет



Выкладываю пример. В данном архиве код, который отражает мою ситуацию.

Присоединённый файл ( Кол-во скачиваний: 1 )
Присоединённый файл  Example_1.rar 17,64 Kb
PM   Вверх
St33l
Дата 9.10.2009, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 16.6.2007

Репутация: нет
Всего: нет



А здесь код уже подредактирован в соответствии с рекомендациями jonie

Это сообщение отредактировал(а) St33l - 9.10.2009, 10:35

Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  Example_2.rar 18,71 Kb
PM   Вверх
jonie
Дата 9.10.2009, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 5
Всего: 118



ну вот.
меняйте класс на это:
Код

    public class MySecondClass : MyFirstClass
    {
        public MySecondClass(MyFirstClass firstClass)
        {
            this.firstClass = firstClass;
            this.firstClass.PropertyChanged += new PropertyChangedEventHandler(firstClass_PropertyChanged);
        }

        void firstClass_PropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            if(e.PropertyName == "PPP") {
                this.PPP = firstClass.PPP / 2;
            }
        }
        
        private MyFirstClass firstClass;
        
    }

и все будет как вы хотите.



--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
St33l
Дата 9.10.2009, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 16.6.2007

Репутация: нет
Всего: нет



заработало ) спасибо большое. еще такой вопрос: сейчас после нажатия кнопки "заполнить" П.П.П. перестало считаться. считается только после того, как ввести что-то в П.П,П. объекта 1.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.1005 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.