мерцание c# Listview на обновлении

Я использую три разных способа предотвращения уязвимости моего веб-приложения для SQL-инъекции.

  1. Использование mysql_real_escape_string(), которое является предопределенной функцией в PHP , и этот код добавляет обратную косую черту к следующим символам: \x00, \n, \r, \, ', " и \x1a. Передайте входные значения в качестве параметров, чтобы свести к минимуму вероятность внедрения SQL.
  2. Самый продвинутый способ - использовать PDO.

Надеюсь, это поможет вам.

Рассмотрим следующий запрос:

$iId = mysql_real_escape_string("1 OR 1=1"); $sSql = "SELECT * FROM table WHERE id = $iId";

mysql_real_escape_string () здесь не защитит. Если вы используете одиночные кавычки ('') вокруг ваших переменных внутри вашего запроса, это то, что защищает вас от этого. Ниже приведено ниже решение:

$iId = (int) mysql_real_escape_string("1 OR 1=1"); $sSql = "SELECT * FROM table WHERE id = $iId";

В этом вопросе есть хорошие ответы.

Я предлагаю , наилучшим вариантом является использование PDO.

Изменить:

mysql_real_escape_string() устарел с PHP 5.5.0. Используйте либо mysqli, либо PDO.

Альтернативой mysql_real_escape_string () является

string mysqli_real_escape_string ( mysqli $link , string $escapestr )

Пример:

$iId = $mysqli->real_escape_string("1 OR 1=1");
$mysqli->query("SELECT * FROM table WHERE id = $iId");

50
задан Majid 19 August 2014 в 20:21
поделиться

6 ответов

Управление ListView имеет проблему мерцания. Проблема, кажется, что перегрузка Обновления управления неправильно реализована таким образом, что она действует как Обновление. Обновление должно заставить управление перерисовывать только свои недопустимые регионы, тогда как Обновление перерисовывает control’s всю клиентскую область. Таким образом, если необходимо было изменить, скажем, цвет фона одного объекта в списке тогда только, что конкретный объект должен должен быть быть перекрашен. К сожалению, управление ListView, кажется, имеет различное мнение и хочет перекрасить его всю поверхность каждый раз, когда Вы смешиваете с единственным item†¦, даже если объект в настоящее время не отображается. Так, так или иначе можно легко подавить мерцание путем прокрутки собственного следующим образом:

class ListViewNF : System.Windows.Forms.ListView
{
    public ListViewNF()
    {
        //Activate double buffering
        this.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);

        //Enable the OnNotifyMessage event so we get a chance to filter out 
        // Windows messages before they get to the form's WndProc
        this.SetStyle(ControlStyles.EnableNotifyMessage, true);
    }

    protected override void OnNotifyMessage(Message m)
    {
        //Filter out the WM_ERASEBKGND message
        if(m.Msg != 0x14)
        {
            base.OnNotifyMessage(m);
        }
    }
}

От: Geekswithblogs.net

91
ответ дан Stormenet 7 November 2019 в 10:35
поделиться

В дополнение к другим ответам много средств управления имеют [Begin|End]Update() метод, который можно использовать для сокращения мерцания при редактировании содержания - например:

    listView.BeginUpdate();
    try {
        // listView.Items... (lots of editing)
    } finally {
        listView.EndUpdate();
    }
22
ответ дан Marc Gravell 7 November 2019 в 10:35
поделиться

Да, заставьте его удвоиться буферизованный. Это уменьшит мерцание;) http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.doublebuffered.aspx

5
ответ дан Gonzalo Quero 7 November 2019 в 10:35
поделиться

Попытайтесь установить двойное буферизированное свойство в истинном.

Также Вы могли использовать:

this.SuspendLayout();

//update control

this.ResumeLayout(False);

this.PerformLayout();
0
ответ дан Ironicnet 7 November 2019 в 10:35
поделиться

Это работало лучше всего на меня.
, Так как Вы редактируете ячейку непосредственно, лучшее решение в Вашем случае состояло бы в том, чтобы просто обновить/перезагрузить ту конкретную ячейку/строку вместо всей таблицы.
Вы могли использовать RedrawItems(...) метод, который в основном перекрашивает только указанный диапазон объектов/строк listview.

public void RedrawItems(int startIndex, int endIndex, bool invalidateOnly);

Ссылка

Это полностью избавилось от полное мерцание listview для меня.
Только соответствующий объект/запись мерцает, будучи обновленным.

За Ваше здоровье!

0
ответ дан 7 November 2019 в 10:35
поделиться

Отличный вопрос, и ответ Сторменента был точным. Вот порт его кода на C ++ для всех, кто может заниматься реализациями C ++ / CLI.

#pragma once

#include "Windows.h" // For WM_ERASEBKGND

using namespace System;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;

public ref class FlickerFreeListView : public ListView
{
public:
    FlickerFreeListView()
    {
        //Activate double buffering
        SetStyle(ControlStyles::OptimizedDoubleBuffer | ControlStyles::AllPaintingInWmPaint, true);

        //Enable the OnNotifyMessage event so we get a chance to filter out 
        // Windows messages before they get to the form's WndProc
        SetStyle(ControlStyles::EnableNotifyMessage, true);
    }

protected:
    virtual  void OnNotifyMessage(Message m) override
    {
        //Filter out the WM_ERASEBKGND message
        if(m.Msg != WM_ERASEBKGND)
        {
            ListView::OnNotifyMessage(m);
        }
    }

};
4
ответ дан 7 November 2019 в 10:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: