JC Carmo Ответов: 1

C# 2015 - событие datagridviewcellformatting ОК при загрузке формы, но не работает должным образом при событии textchange


Hello guys,

Greetings from Brazil!  I'm a beginner programmer developing a Visual Studio 2015 C# WinForms database application with MySQL.

I have a DataGridViewCellFormatting event on the form and it works perfectly when the form loads, but when the DataGridView is updated triggered by a TextChanged event to search for records, the cell formatting event doesn't work properly anymore.

If the value of column 4 is negative, than the row forecolor should be red and if the value is positive the row forecolor should be blue, as it happens when the form loads

I've tried Update, Refresh, Invalidate and everything else on the book, but it doesn't work.  Thank you.  I really appreciate your time and help!

Best regards,

JC.


Что я уже пробовал:

Here's my code:

        private void caixaDataGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            caixaDataGridView.RowsDefaultCellStyle.BackColor = Color.White;
            caixaDataGridView.AlternatingRowsDefaultCellStyle.BackColor = Color.LightGray;

            try
            {
                decimal valor = Convert.ToDecimal(bremi691_appDataSet.caixa.Rows[e.RowIndex]["valor"]);

                if (valor < 0)
                {
                    e.CellStyle.ForeColor = Color.Red;
                }
                else
                {
                    e.CellStyle.ForeColor = Color.Blue;
                }
            }
            catch (Exception)
            {
            }
        }


And for the TextChanged event:

        private void txtSearch_TextChanged(System.Object sender, System.EventArgs e)
        {
            try
            {
                if (cboColumn.Text == "Nome")
                {
                    caixaBindingSource.Filter = string.Format("nome LIKE '{0}%'", txtSearch.Text);
                }

                if (cboColumn.Text == "Tipo")
                {
                    caixaBindingSource.Filter = string.Format("tipo LIKE '{0}%'", txtSearch.Text);
                }

                if (cboColumn.Text == "Referência")
                {
                    caixaBindingSource.Filter = string.Format("referencia LIKE '{0}%'", txtSearch.Text);
                }
            }
            catch (Exception)
            {
            }
        }

1 Ответов

Рейтинг:
10

JC Carmo

Я нашел решение! Это не имело абсолютно никакого отношения к связующим источникам или тому подобному. Все, что мне нужно было сделать, это изменить свой код CellFormatting на следующий:

частная caixaDataGridView_CellFormatting недействительным(объект отправителя, DataGridViewCellFormattingEventArgs е)
{
caixaDataGridView.RowsDefaultCellStyle.BackColor = Цвет.Белый;
caixaDataGridView.AlternatingRowsDefaultCellStyle.BackColor = Цвет.Светло-серый;

по каждому элементу (ячейки datagridviewrow MyRow в caixaDataGridView.Строк)
{
если (конвертировать.ToInt32(MyRow.Ячейки[4].Значение) < 0)
{
Майроу.DefaultCellStyle.Цвет Текста = Цвет.Красный;
}
еще
{
Майроу.DefaultCellStyle.ForeColor = Цвет.Синий;
}
}
}

Теперь он работает отлично! Но я очень благодарен вам, ребята, за ваше время и попытку помочь мне. Я действительно ценю это!

С уважением,

JC. :)