powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Вычислить поле
15 сообщений из 15, страница 1 из 1
Вычислить поле
    #32860925
Fedishen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне необходимо вычислить поле, значением которого является разница двух других полей типа DateTime , загвоздка вся в том, что в свойстве поля expression нельзя записать что то вроде:
поле1.Subtract(поле2).TotalMinutes или поле1 - поле2 он не понимает операцию "-" над полями DateTime,
а в событии RowChanging нельзя присваивать полям значения.
Так где же мне вычислить это поле и как?
...
Рейтинг: 0 / 0
Вычислить поле
    #32860957
Фотография Oleg Lugovskiy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
System.TimeSpan vage_days;
days = (DateTime)date1 - (DateTime)date2;
...
Рейтинг: 0 / 0
Вычислить поле
    #32860970
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему вы не можете воспользоваться:
RowChanged
RowChanging
ColumnChanged
...
Рейтинг: 0 / 0
Вычислить поле
    #32861000
Fedishen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Oleg Lugovskiy
Код: plaintext
1.
2.
System.TimeSpan vage_days;
days = (DateTime)date1 - (DateTime)date2;


Спасибо, догадался, но куда это предлагаете вставить? Что бы колонка у меня отображала вот этот days
...
Рейтинг: 0 / 0
Вычислить поле
    #32861044
Фотография Oleg Lugovskiy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а какой сорс датагриду присваиваете?
...
Рейтинг: 0 / 0
Вычислить поле
    #32861054
Fedishen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SaПочему вы не можете воспользоваться:
RowChanged
RowChanging
ColumnChanged

Воспользоваться то могу, но в RowChanging нельзя присваивать полям значения.
Если написать:
private static void ShipmentDTRowChanging(object sender, DataRowChangeEventArgs e)
{
e.Row["LoadingTime"] = 1;
}
вывалится Exception:
Cannot change a proposed value in the RowChanging event
в событии RowChanged то-же хрень какая-то лезет.
а вот событие . ColumnChanged ....хм, заработало. Но оно срабатывает n-раз. Т.е очень много раз оно работает, надо разобраться почему.
...
Рейтинг: 0 / 0
Вычислить поле
    #32861056
Fedishen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Oleg Lugovskiyа какой сорс датагриду присваиваете?

DataTable
...
Рейтинг: 0 / 0
Вычислить поле
    #32861066
Фотография Oleg Lugovskiy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в сорсе поменять
...
Рейтинг: 0 / 0
Вычислить поле
    #32861069
Fedishen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Oleg Lugovskiyв сорсе поменять
А я где по вашему меняю? (см. самое верхнее сообщение)
...
Рейтинг: 0 / 0
Вычислить поле
    #32861099
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы вычисляемое поле тоже меняете, -> и n раз. Сделайте так чтобы ColumnChanged не реагировал на вычисляемый столбец.

Например используя e.Column.ColumnName
...
Рейтинг: 0 / 0
Вычислить поле
    #32861110
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вернее реагировать он будет в любом случае.
Если ColumnName равен = названию вычисляемого поля, выход из Handle без вычислений и присваиваний

Код: plaintext
 uid  =  S a
...
Рейтинг: 0 / 0
Вычислить поле
    #32861162
Fedishen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Короче разобрался, всем большой СЕНКС. Надо вычисление производить в событии DataTable.ColumnChanged. и в DataColumnChangeEventArgs e надо проверять:
Код: plaintext
1.
2.
3.
4.
if ((e.Column.ColumnName.Equals("поле1")) || (e.Column.ColumnName.Equals("поле2")) 
{
полеРезультат = необходимые вычисления с поле1 и поле2
}
...
Рейтинг: 0 / 0
Вычислить поле
    #32861450
Fedishen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все супер за исключением одной проблемы:
ColumnChanged срабатывает только когда меняются значения в таблице. А при первой загрузке таблицы (когда запускается приложение) данный ивент не срабатывает и необходимо пробежать по всем строкам и вычислить необходимые поля вручную. Как обойти такую шнягу?
...
Рейтинг: 0 / 0
Вычислить поле
    #32861735
Фотография Oleg Lugovskiy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
запросом наприммер можно

Код: plaintext
select (DATE1 - DATE2) as Days from table
...
Рейтинг: 0 / 0
Вычислить поле
    #32861765
Fedishen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Oleg Lugovskiyзапросом наприммер можно

Код: plaintext
select (DATE1 - DATE2) as Days from table


Я сделал вычисляемое поле в БД
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Вычислить поле
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]