2009-12-10 5 views
1

Это стандартно в полной версии .net. Я хочу привязать к совокупности объектов, а затем обработать какое-то событие RowDataBound и изменить цвет фона строки на основе одного из свойств объектов. Возможно ли это в Windows Mobile с использованием .Net CF 3.5?Условное форматирование в DataGrid с использованием .Net Compact Framework 3.5

ответ

0

У меня та же проблема атм, вот мой soloution до сих пор:

public class DataGridExtendedTextBoxColumn : DataGridTextBoxColumn 
{ 
    // I use the Form to store Brushes and the Font, feel free to handle it differently. 
    Form1 parent; 

    public DataGridExtendedTextBoxColumn(Form1 parent) 
    { 
     this.parent = parent; 
    } 

    // You'll need to override the paint method 
    // The easy way: only change fore-/backBrush 
    protected override void Paint(Graphics g, Rectangle bounds, CurrencyManager source, int rowNum, Brush backBrush, Brush foreBrush, bool alignToRight) 
    { 
     base.Paint(g, bounds, source, rowNum, parent.redBrush, parent.fontBrush, alignToRight); 
    } 
} 

Трудный путь: сделать это самостоятельно

protected override void Paint(Graphics g, Rectangle bounds, CurrencyManager source, int rowNum, Brush backBrush, Brush foreBrush, bool alignToRight) 
{ 
    // Background 
    g.FillRectangle(parent.redBrush, bounds); 

    // Get and format the String 
    StringFormat sf = new StringFormat(); 
    DataRowView dataRowView = (DataRowView)source.List[rowNum]; 
    DataRow row = dataRowView.Row; 
    Object value = row[this.MappingName]; 
    String str; 
    if (value.Equals(System.DBNull.Value)) 
    { 
     str = this.NullText; 
    } 
    else if (this.Format.Length != 0) 
    { 
     // NOTE: Formatting is handled differently! 
     str = String.Format(this.Format, value); 
    } 
    else 
    { 
     str = value.ToString(); 
    } 

    // Draw the String 
    g.DrawString(str, parent.font, parent.fontBrush, new RectangleF(bounds.X, bounds.Y, bounds.Width, bounds.Height)); 

    //base.Paint(g, bounds, source, rowNum, parent.redBrush, parent.fontBrush, alignToRight); 
} 

Последний подход дает вам полный проверочные. Обратите внимание, что строка формата будет выглядеть примерно так:

this.dataGridTextBoxColumn1.Format = "{0:0000}"; 

Вместо того

this.dataGridTextBoxColumn1.Format = "0000"; 

Чтобы добавить Coloums:

// The "this" is due to the new constructor 
this.dataGridTextBoxColumn1 = new DataGridExtendedTextBoxColumn(this); 
this.dataGridTableStyle1.GridColumnStyles.Add(this.dataGridTextBoxColumn1); 

Единственный способ изменить высоту строк кажется для изменения DataGrid.PreferedRowHeight, но это задает высоту для всех строк. В зависимости от ваших потребностей может быть хорошей идеей получить новый класс для каждого столбца. Это все еще работает для меня, поэтому, если у вас есть подсказки, дайте мне знать, пожалуйста. Удача в этом; D