Событие, которое происходит во время DataGridViewComboBoxColumn SelectedIndexChanged

Как вы, наверное, знаете, Xdebug отказался от поддержки профилирования памяти с версии 2. *. Пожалуйста, найдите здесь строку «удаленные функции»: http://www.xdebug.org/updates.php

Удаленные функции

blockquote>

Итак, я попробовал другой инструмент, и он работал хорошо для меня.

https: //github.com/arnaud-lb/php-memory-profiler

Это то, что я сделал на моем сервере Ubuntu, чтобы включить его:

sudo apt-get install libjudy-dev libjudydebian1
sudo pecl install memprof
echo "extension=memprof.so" > /etc/php5/mods-available/memprof.ini
sudo php5enmod memprof
service apache2 restart

И затем в моем коде:

Наконец откройте файл callgrind.out с помощью KCachegrind

Использование Google gperftools (рекомендуется!) [/ ​​G8 ]

Прежде всего установите ggftools Google, загрузив последний пакет здесь: https://code.google.com/p/gperftools/

Затем, как всегда:

sudo apt-get update
sudo apt-get install libunwind-dev -y
./configure
make
make install

Теперь в вашем коде:

memprof_enable();

// do your magic

memprof_dump_pprof(fopen("/tmp/profile.heap", "w"));

Затем откройте терминал и запустите:

pprof --web /tmp/profile.heap

pprof создаст новое окно в существующем сеансе браузера, как показано ниже:

PHP memory profiling with memprof and gperftools [/g11]

Xhp rof + Xhgui (лучшее, на мой взгляд, для профилирования как процессора, так и памяти).

С Xhprof и Xhgui вы можете также профилировать использование процессора или просто использование памяти, если это ваша проблема на данный момент. Это очень полные решения, они дают вам полный контроль, и журналы могут быть записаны как на mongo, так и в файловой системе.

Подробнее см. Мой ответ здесь .

Blackfire

Blackfire - это профилировщик PHP SensioLabs, ребята Symfony2 https://blackfire.io/

Если вы используете puphpet , чтобы настроить свою виртуальную машину, вы будете рады узнать, что она поддерживается; -)

21
задан Community 23 May 2017 в 11:55
поделиться

3 ответа

Дайте этим двум простым методам попробовать («1» в верхнем методе - это индекс столбца со списком)

Строка, в которую вы будете вносить изменения, будет линией установщика cel.Value = , как вы можете изменить его на то, что вам нравится.

<час>
    private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
    {
        if (dataGridView1.CurrentCell.ColumnIndex == 1 && e.Control is ComboBox)
        {
            ComboBox comboBox = e.Control as ComboBox;
            comboBox.SelectedIndexChanged -= LastColumnComboSelectionChanged;
            comboBox.SelectedIndexChanged += LastColumnComboSelectionChanged;
        }
    }

    private void LastColumnComboSelectionChanged(object sender, EventArgs e)
    {
        var currentcell = dataGridView1.CurrentCellAddress;
        var sendingCB = sender as DataGridViewComboBoxEditingControl;
        DataGridViewTextBoxCell cel = (DataGridViewTextBoxCell)dataGridView1.Rows[currentcell.Y].Cells[0];
        cel.Value = sendingCB.EditingControlFormattedValue.ToString();
    }
<час>

enter image description here

29
ответ дан TweeZz 23 May 2017 в 11:55
поделиться

Этот ответ витает в нескольких местах. Использование DataGridViewEditingControlShowingEventHandler вызовет больше событий, чем вы намереваетесь. В моем тестировании это вызвало событие несколько раз. Также использование события combo.SelectedIndexChanged - = на самом деле не удалит событие, а просто продолжит укладку. Во всяком случае, я нашел решение, которое, кажется, работает. Я включаю пример кода ниже:

           // Add the events to listen for
        dataGridView1.CellValueChanged +=
             new DataGridViewCellEventHandler(dataGridView1_CellValueChanged);
        dataGridView1.CurrentCellDirtyStateChanged +=
             new EventHandler(dataGridView1_CurrentCellDirtyStateChanged);

    // This event handler manually raises the CellValueChanged event 
    // by calling the CommitEdit method. 
    void dataGridView1_CurrentCellDirtyStateChanged(object sender,
        EventArgs e)
    {
        if (dataGridView1.IsCurrentCellDirty)
        {
            // This fires the cell value changed handler below
            dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
        }
    }

    private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
    {
        // My combobox column is the second one so I hard coded a 1, flavor to taste
        DataGridViewComboBoxCell cb = (DataGridViewComboBoxCell)dataGridView1.Rows[e.RowIndex].Cells[1];
        if (cb.Value != null)
        {
               // do stuff
               dataGridView1.Invalidate();
        }
     }
39
ответ дан Severun 23 May 2017 в 11:55
поделиться

Эта ссылка верна. Обработайте EditingControlShowing event DataGridView. В этом обработчике событий проверьте, интересует ли текущий столбец. И затем создайте временный комбинированный объект: -

ComboBox comboBox = e.Control as ComboBox;

MSDN имеет образец: см. В разделе примера здесь . Обратите внимание на Inheritance Hierarchy & amp; Class Syntax в ссылке msdn: -

открытый класс DataGridViewComboBoxEditingControl: ComboBox , IDataGridViewEditingControl

private DataGridView dataGridView1 = new DataGridView();

private void AddColorColumn()
{
    DataGridViewComboBoxColumn comboBoxColumn =
        new DataGridViewComboBoxColumn();
    comboBoxColumn.Items.AddRange(
        Color.Red, Color.Yellow, Color.Green, Color.Blue);
    comboBoxColumn.ValueType = typeof(Color);
    dataGridView1.Columns.Add(comboBoxColumn);
    dataGridView1.EditingControlShowing +=
        new DataGridViewEditingControlShowingEventHandler(
        dataGridView1_EditingControlShowing);
}

private void dataGridView1_EditingControlShowing(object sender,
    DataGridViewEditingControlShowingEventArgs e)
{
    ComboBox combo = e.Control as ComboBox;
    if (combo != null)
    {
        // Remove an existing event-handler, if present, to avoid 
        // adding multiple handlers when the editing control is reused.
        combo.SelectedIndexChanged -=
            new EventHandler(ComboBox_SelectedIndexChanged);

        // Add the event handler. 
        combo.SelectedIndexChanged +=
            new EventHandler(ComboBox_SelectedIndexChanged);
    }
}

private void ComboBox_SelectedIndexChanged(object sender, EventArgs e)
{
    ((ComboBox)sender).BackColor = (Color)((ComboBox)sender).SelectedItem;
}
2
ответ дан Angshuman Agarwal 23 May 2017 в 11:55
поделиться
Другие вопросы по тегам:

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