Отключение или выделение серым цветом строк с нулевыми значениями - PullRequest
0 голосов
/ 08 июля 2020

У меня есть datagridview с 2 столбцами, прикрепленными к отчетам Crystal, в этом datagridview есть 1000 строк, я заполняю свой datagrid следующим образом:

PearsonDataGrid.Rows.Add("", "")

, поэтому для расчета моих отчетов о кристаллах данных, а также математической функции не принимать нулевые значения, у меня есть лоток, чтобы поместить эту формулу в мои данные в столбцах 1 и 2:

If IsNull ({DataTable1.XTEST}) OR {DataTable1.XTEST}="" OR Not(IsNumeric({DataTable1.XTEST}))
Then
0
Else
TONUMBER({DataTable1.XTEST})

и его работа, но отчеты кристаллов подсчитывают нулевое значение, и у меня есть формула autre, разделенная на счетчик, поэтому результат будет неверным.

как отключить или затенять строки с нулевым значением в DataGridView или как отключить строки с нулевым значением из вычисленного.

Есть ли простой способ отключить / затенять строки с нулевым значением в DataGridView, пока я не введу числовое значение c.

Как spss datagrid Пример:

введите описание изображения здесь

1 Ответ

2 голосов
/ 09 июля 2020

Можно попробовать примерно так. Код просто изменяет передний цвет заголовков строк:

    private void Form1_Load(object sender, EventArgs e)
    {
        // Disable user current theme for the datagrid headers.
        dataGridView1.EnableHeadersVisualStyles = false;
        // Set the default row header style forecolor as gray.
        dataGridView1.RowHeadersDefaultCellStyle.ForeColor = Color.Gray;

        
        // I initialized the rows with null values to avoid casting to string
        // later on the CellValueChanged handler.
        
        // TEST:
        //dataGridView1.Rows.Add(null, null);
        //dataGridView1.Rows[0].HeaderCell.Value = 1.ToString();
        //dataGridView1.Rows.Add(null, null);
        //dataGridView1.Rows[1].HeaderCell.Value = 2.ToString();
        //dataGridView1.Rows.Add(null, null);
        //dataGridView1.Rows[2].HeaderCell.Value = 3.ToString();
        //dataGridView1.Rows.Add(null, null);
        //dataGridView1.Rows[3].HeaderCell.Value = 4.ToString();
        //dataGridView1.Rows.Add(null, null);
        //dataGridView1.Rows[4].HeaderCell.Value = 5.ToString();
        //dataGridView1.Rows.Add(null, null);
        //dataGridView1.Rows[5].HeaderCell.Value = 6.ToString();
    }

    /// <summary>
    /// Cell value changed event handler.
    /// </summary>
    private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e)
    {
        // Avoid to process less than zero indexed rows.
        if (e.RowIndex < 0) return;
        // Get the current row.
        var currentRow = dataGridView1.Rows[e.RowIndex];
        bool isRowEmpty = true;
        // Iterate on every cell to check if every cell has a null value.
        if (currentRow.Cells.Count > 0)
        {
            foreach (DataGridViewCell cell in currentRow.Cells)
            {
                if (!(cell.Value is null))
                {
                    isRowEmpty = false;
                    break;
                }
            }
        }

        if (isRowEmpty)
        {
            // Every row cell is empty, gray out the header.
            dataGridView1.Rows[e.RowIndex].HeaderCell.Style.ForeColor = Color.Gray;
        }
        else
        {
            // Some cell has a value, set the row header forecolor to black.
            dataGridView1.Rows[e.RowIndex].HeaderCell.Style.ForeColor = Color.Black;
        } 
    }

Результат получается:

введите описание изображения здесь

...