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


Спасибо, догадался, но куда это предлагаете вставить? Что бы колонка у меня отображала вот этот days
...
Рейтинг: 0 / 0
12.01.2005, 13:28
    #32861044
Oleg Lugovskiy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычислить поле
а какой сорс датагриду присваиваете?
...
Рейтинг: 0 / 0
12.01.2005, 13:31
    #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
12.01.2005, 13:32
    #32861056
Fedishen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычислить поле
Oleg Lugovskiyа какой сорс датагриду присваиваете?

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

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

Код: plaintext
 uid  =  S a
...
Рейтинг: 0 / 0
12.01.2005, 14:15
    #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
12.01.2005, 15:37
    #32861450
Fedishen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычислить поле
Все супер за исключением одной проблемы:
ColumnChanged срабатывает только когда меняются значения в таблице. А при первой загрузке таблицы (когда запускается приложение) данный ивент не срабатывает и необходимо пробежать по всем строкам и вычислить необходимые поля вручную. Как обойти такую шнягу?
...
Рейтинг: 0 / 0
12.01.2005, 17:01
    #32861735
Oleg Lugovskiy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вычислить поле
запросом наприммер можно

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

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


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


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