четверг, 14 июля 2011 г.

Привязка к DataGridView - Есть ли способ "привязать" цвет фона ячейки?


Вы можете написать обработчик для события CellFormatting DataGridView к настроить цвет фона. Здесь работали примера (вы должны иметь вытащили DataGridView на форму по умолчанию дважды нажал на CellFormatting событием для создания обработчика):
using System.Drawing; 
using System.Windows.Forms; 
namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 
        private BindingSource _source = new BindingSource(); 
        public Form1() 
        { 
            InitializeComponent(); 
            _source.Add(new MyData(Status.Amber, "Item A")); 
            _source.Add(new MyData(Status.Red, "Item B")); 
            _source.Add(new MyData(Status.Green, "Item C")); 
            _source.Add(new MyData(Status.Green, "Item D")); 
            dataGridView1.DataSource = _source; 
            dataGridView1.Columns[0].Visible = false; 
        } 
        private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) 
        { 
            if (e.ColumnIndex == 1) 
            { 
                DataGridView dgv = sender as DataGridView; 
                MyData data = dgv.Rows[e.RowIndex].DataBoundItem as MyData; 
                switch (data.Status) 
                { 
                    case Status.Green: 
                        e.CellStyle.BackColor = Color.Green; 
                        break; 
                    case Status.Amber: 
                        e.CellStyle.BackColor = Color.Orange; 
                        break; 
                    case Status.Red: 
                        e.CellStyle.BackColor = Color.Red; 
                        break; 
                } 
            } 
        } 
    } 
    public class MyData 
    { 
        public Status Status { get; set; } 
        public string Text { get; set; } 
        public MyData(Status status, string text) 
        { 
            Status = status; 
            Text = text; 
        } 
    } 
    public enum Status 
    { 
        Green, 
        Amber, 
        Red 
    } 
} 
Объекты здесь просто о статусе и текст для простоты. Я создаю BindingSource по примеру этих объектов, а затем использовать его в качестве источника данных для DataGridView. По умолчанию, автоматически генерирует сетку колонн когда вы связываете, поэтому нет необходимости делать это вручную. Я также скрыть первую колонку, которая связана со стоимостью статуса, как мы собираемся Цвет текста вместо клетки.
Чтобы действительно сделать картину, мы ответим на CellFormatting событие. Получить ссылку на DataGridView методом литья отправитель, а затем используйте RowIndex собственности DataGridViewCellFormattingEventArgs объект, чтобы добраться до пункта iteself данных (каждая строка имеет DataBoundItem собственности, что дает нам удобнее это). Как DataBoundItem это тип объекта, мы должны привести его к нашим конкретным типом, то мы действительно можем получить в собственность статус самой ... Уф!
У меня не было никакого опыта программирования с подсказкой, но я бы подумал, что вы должны реагировать на события MouseHover, то работа по выявлению, какая строка в настоящее время указано по адресу, чтобы начать с.
Я надеюсь, это поможет.

Комментариев нет: