我有 2 个变量,我想在 DataGridView 的一个单元格中显示。
图标股票图标; 内部库存状态;
我已经看过http://msdn.microsoft.com/en-us/library/7tas5c80.aspx但我认为它的方式很复杂,并且没有显示如何在一个单元格中显示变量。
我不需要编辑能力,只显示两个变量。
有人可以给我一个小例子吗?
我在 C# 4.0 和它的 System.Windows.Forms.DataGridView 中工作
我有 2 个变量,我想在 DataGridView 的一个单元格中显示。
图标股票图标; 内部库存状态;
我已经看过http://msdn.microsoft.com/en-us/library/7tas5c80.aspx但我认为它的方式很复杂,并且没有显示如何在一个单元格中显示变量。
我不需要编辑能力,只显示两个变量。
有人可以给我一个小例子吗?
我在 C# 4.0 和它的 System.Windows.Forms.DataGridView 中工作
这是我自己的解决方案。只需将 Column 类型设置为 LagerStatusColumn 即可完成工作。
public class LagerStatusColumn : DataGridViewColumn
{
public LagerStatusColumn()
{
CellTemplate =
new LagerStatusCell();
ReadOnly = true;
}
}
public class LagerStatusCell : DataGridViewTextBoxCell
{
protected override void Paint(System.Drawing.Graphics graphics, System.Drawing.Rectangle clipBounds, System.Drawing.Rectangle cellBounds, int rowIndex, DataGridViewElementStates cellState, object value, object formattedValue, string errorText, DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts paintParts)
{
base.Paint(graphics, clipBounds, cellBounds, rowIndex, cellState, value, "", errorText, cellStyle,
advancedBorderStyle, paintParts);
var cellValue = Convert.IsDBNull(value) ? 0 : Convert.ToDecimal(value);
const int horizontaloffset = 2;
var parent = (LagerStatusColumn)this.OwningColumn;
var fnt = parent.InheritedStyle.Font;
var icon = Properties.Resources.lager;
if (cellValue == 0)
icon = Properties.Resources.rest;
else if (cellValue < 0)
icon = Properties.Resources.question_white;
const int vertoffset = 0;
graphics.DrawIcon(icon, cellBounds.X + horizontaloffset,
cellBounds.Y + vertoffset);
var cellText = formattedValue.ToString();
var textSize =
graphics.MeasureString(cellText, fnt);
// Calculate the correct color:
var textColor = parent.InheritedStyle.ForeColor;
if ((cellState &
DataGridViewElementStates.Selected) ==
DataGridViewElementStates.Selected)
{
textColor = parent.InheritedStyle.
SelectionForeColor;
}
// Draw the text:
using (var brush = new SolidBrush(textColor))
{
graphics.DrawString(cellText, fnt, brush,
cellBounds.X + icon.Width + 2,
cellBounds.Y + 0);
}
}
}