Проблема форматирования DataGridView при загрузке - PullRequest
1 голос
/ 20 июля 2011

Я пытаюсь отформатировать DataGridView с использованием стиля цвета и т. Д. DGV загружается (с помощью метода buildGrid) при запуске формы, как вы можете видеть в коде конструктора:

    public Report1(DataSet dsReport1, string sDateRep)
    {
        InitializeComponent();
        sDate = sDateRep;
        dsReportGrid = dsReport1;
        orgDataset();
        buildGrid();
    }

Вот код для DGV:

    private void buildGrid()
    {
     try
        {
            dataGridView1.DataSource = dsReportGrid.Tables[0];
            Controls.Add(dataGridView1);
            dataGridView1.Visible = true;
            dataGridView1.Rows[2].Cells[1].Style.ForeColor = Color.Red;
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

Он отлично загружает DGV, проблема в том, что он не будет окрашивать ячейки так, как хотелось бы, просто оставляет его черным.

Забавно, когда я вызываю buildGrid через любой другой метод, кроме конструктора, он делает это!например:

    private void Form1_Resize(object sender, EventArgs e)
    {

        buildGrid();
    }

Почему это происходит?Как мне сделать так, чтобы ячейки окрашивались с самого начала?

Спасибо!

1 Ответ

5 голосов
/ 20 июля 2011

Проблема в том, что привязка данных еще не завершена в вашем конструкторе, поэтому любые изменения в сетке удалены (на самом деле я не уверен на 100% , почему они удалены, поскольку строки и ячейкиесть, но это то, как это работает).

Правильное место для размещения такого рода форматирования находится в обработчике события DataBindingComplete - это событие возникает после завершения привязки данных, но до того, как нарисована сетка.

public Report1(DataSet dsReport1, string sDateRep)
{
    InitializeComponent();
    sDate = sDateRep;
    dsReportGrid = dsReport1;
    orgDataset();

    dataGridView1.DataSource = dsReportGrid.Tables[0];
    Controls.Add(dataGridView1);
    dataGridView1.Visible = true;

    dataGridView1.DataBindingComplete += dataGridView1_DataBindingComplete;
}

void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
    dataGridView1.Rows[2].Cells[1].Style.ForeColor = Color.Red;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...