Проблема с объектами DataTable и DataGridView - PullRequest
1 голос
/ 11 сентября 2010

У меня следующая проблема

В моей заявке я сделал некоторые вычисления и после этого поместил их в объект DataTable (6 столбцов, данные в последнем из них наиболее важны) Чтобы просмотреть результаты, я поместил их в объект DataGridView, и есть моя проблема. В зависимости от данных, содержащихся в последнем столбце, я хочу пометить ячейки соответствующими цветами. И я не знаю, должен ли я сделать это на объекте DataGridView, потому что это пользовательские интерфейсы? Где я могу это сделать? Объект DataTable не имеет свойств стиля?

Большое спасибо ...

Ответы [ 3 ]

0 голосов
/ 12 сентября 2010

Я сделал что-то вроде этого:

 public void setABCColor(DataGridView DGV)
    {
        for (int i = 0; i < DGV.Rows.Count; i++)
        {
            if ((string)DGV.Rows[i].Cells[6].Value == "A")
            {
                DGV.Rows[i].Cells[6].Style.BackColor = Color.Green;
            }
            else if ((string)DGV.Rows[i].Cells[6].Value == "B")
            {
                DGV.Rows[i].Cells[6].Style.BackColor = Color.Blue;
            }
            else
            {
                DGV.Rows[i].Cells[6].Style.BackColor = Color.Red;
            }
        }
    }

Это приемлемо?Разве это не меняет допущение шаблона проектирования MVC?

0 голосов
/ 11 января 2011

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

void myDataGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
            if (e.Value.ToString() == "A" )
                e.CellStyle.BackColor = Color.Red;
}
0 голосов
/ 12 сентября 2010

Вы можете использовать событие CellPainting объекта DataGridView для форматирования ваших ячеек на основе их содержимого.

например `

private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
    {
        if (e.ColumnIndex >= 0 && e.RowIndex >= 0)
        {

            switch (dataGridView1.Columns[e.ColumnIndex].DataPropertyName)
            {
                case "Description":
                    {
                        break;
                    }
                case "NormalRoom":
                    {
                        break;
                    }
                case "Colour1":
                case "Colour2":
                    {
                        Color co = Color.White;
                        if (e.Value != null && e.Value != DBNull.Value)
                        {
                            co = string2Color((string)e.Value);
                        }
                        e.CellStyle.BackColor = Color.White;
                        e.CellStyle.ForeColor = Color.Black;

и т. Д .`

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...