В моем предыдущем задании мы боролись с тем, чтобы заставлять наше богатое приложение UI нарисовать немедленно и гладко. Мы использовали стандартные средства управления .NET, пользовательские элементы управления и средства управления devexpress.
После большого поиска с помощью Google и использования отражателя я столкнулся с сообщением WM_SETREDRAW win32. Это действительно останавливает рисунок средств управления, пока Вы обновляете их и можете быть применены, IIRC к порождать/содержать панели.
Это - очень очень простой класс, демонстрирующий, как использовать это сообщение:
class DrawingControl
{
[DllImport("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, Int32 wMsg, bool wParam, Int32 lParam);
private const int WM_SETREDRAW = 11;
public static void SuspendDrawing( Control parent )
{
SendMessage(parent.Handle, WM_SETREDRAW, false, 0);
}
public static void ResumeDrawing( Control parent )
{
SendMessage(parent.Handle, WM_SETREDRAW, true, 0);
parent.Refresh();
}
}
существуют более полные обсуждения этого - Google для C# и WM_SETREDRAW, например,
И тем, кого это касается, это - подобный пример в VB:
Public Module Extensions
Private Function SendMessage(ByVal hWnd As IntPtr, ByVal Msg As Integer, ByVal wParam As Boolean, ByVal lParam As IntPtr) As Integer
End Function
Private Const WM_SETREDRAW As Integer = 11
' Extension methods for Control
Public Sub ResumeDrawing(ByVal Target As Control, ByVal Redraw As Boolean)
SendMessage(Target.Handle, WM_SETREDRAW, True, 0)
If Redraw Then
Target.Refresh()
End If
End Sub
Public Sub SuspendDrawing(ByVal Target As Control)
SendMessage(Target.Handle, WM_SETREDRAW, False, 0)
End Sub
Public Sub ResumeDrawing(ByVal Target As Control)
ResumeDrawing(Target, True)
End Sub
End Module
Вы можете использовать функцию ceil
, по крайней мере, в MySQL; эта часть кода SQL:
select ceil(45.01), ceil(45.49), ceil(45.99);
каждый раз будет получать "46".
Для вашего обновления, я бы сказал:
Update product SET price = ceil(45.01)
Кстати: В MySQL ceil
является псевдонимом до потолка
; не уверен насчет других систем БД, поэтому вам, возможно, придется использовать ту или иную, в зависимости от используемой БД ...
Цитата из документации:
CEILING (X)
Возвращает наименьшее целочисленное значение не меньше, чем X.
И данный пример:
mysql> SELECT CEILING(1.23);
-> 2
mysql> SELECT CEILING(-1.23);
-> -1
Если вы хотите округлить, используйте функцию округления. Используйте функцию потолка, если вы хотите получить наименьшее целое число, немного большее, чем ваш аргумент.
Например: select round (843.4923423423,0) from dual дает вам 843 и
select round (843.6923423423,0) из dual дает 844
Попробуйте потолок ...
SELECT Ceiling(45.01), Ceiling(45.49), Ceiling(45.99)
Это зависит от сервера базы данных, но его часто называют чем-то вроде CEIL
или ПОТОЛОК
. Например, в MySQL ...
mysql> select ceil(10.5);
+------------+
| ceil(10.5) |
+------------+
| 11 |
+------------+
Затем вы можете выполнить UPDATE PRODUCT SET price = CEIL (some_other_field);