не может изменить изображение в datagridview winforms - PullRequest
2 голосов
/ 25 июня 2011

Мне нужно изменить изображение столбца, если существует путь, указанный в другом столбце.

У меня есть следующий код:

dataGridView1.DataSource = table;


        DataGridViewButtonColumn buttonCol = new DataGridViewButtonColumn();
        buttonCol.HeaderText = "";
        buttonCol.Name = "BrowseButton";
        buttonCol.Text = "...";
        buttonCol.UseColumnTextForButtonValue = true; 
        dataGridView1.Columns.Add(buttonCol);

        DataGridViewImageColumn imgCol = new DataGridViewImageColumn();
        imgCol.HeaderText = "Status";
        imgCol.Name = "StatusImage";
        imgCol.Image = null;
        dataGridView1.Columns.Add(imgCol);
        dataGridView1.Columns["StatusImage"].DisplayIndex = 4;

 foreach (DataGridViewRow myRow in dataGridView1.Rows)
        {
            string overRiddenDirPath = myRow.Cells["Overridden Dir"].Value.ToString();
            string preConfiguredPath = myRow.Cells["PreConfigured Dir"].Value.ToString();
            string path = overRiddenDirPath;
            if (overRiddenDirPath == "")
            {
                path = preConfiguredPath;
            }

            DataGridViewImageCell cell = myRow.Cells["StatusImage"] as DataGridViewImageCell;

            // If the directory doesn't exist
            if (!Directory.Exists(path))
            {
                cell.Value = Image.FromFile(@"Chrysanthemum.jpg");
            }
            else
            {
                cell.Value = Image.FromFile(@"Jellyfish.jpg");                   
            }
        }

изображение не отображается: путьизображения в порядке, потому что, если я скажу это так:

  DataGridViewImageColumn imgCol = new DataGridViewImageColumn();
        imgCol.HeaderText = "Status";
        imgCol.Name = "StatusImage";
        imgCol.Image = Image.FromFile(@"Chrysanthemum.jpg");
        dataGridView1.Columns.Add(imgCol);
        dataGridView1.Columns["StatusImage"].DisplayIndex = 4;

, оно отображается, но не изменяется при условии.

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

Любая помощь приветствуется.спасибо

1 Ответ

6 голосов
/ 25 июня 2011

Вместо этого вы можете поместить свой код в событие CellFormatting.

void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{            
    if (dataGridView1.Columns[e.ColumnIndex].Name == "StatusImage")
    {
        // Your code would go here - below is just the code I used to test
        e.Value = Image.FromFile(@"C:\Pictures\TestImage.jpg");
    }
}

Важно отметить, что вы устанавливаете e.Value, а не cell.Value здесь.


Вот код из примера, который я пробовал, где я получаю доступ к значению другого столбца, чтобы условно изменить выбранное изображение.Это прекрасно работает независимо от того, какой индекс отображения имеет изображение.

void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
    if (!dataGridView1.Rows[e.RowIndex].IsNewRow)
    {
        if (dataGridView1.Columns[e.ColumnIndex].Name == "StatusImage")
        {
            if (((int)dataGridView1.Rows[e.RowIndex].Cells["ValueTwo"].Value) == 5)
            {
                e.Value = Image.FromFile(@"C:\Pictures\TestImage1.jpg");
            }
            else
            {
                e.Value = Image.FromFile(@"C:\Pictures\TestImage2.jpg");
            }
        }
    }
}

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

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