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