在 DataGridView 中的单元格内显示图标和字符串

发布于 2024-09-08 22:55:27 字数 372 浏览 12 评论 0原文

我想在 DataGridView 的一个单元格中显示 2 个变量。

股票图标; Int 库存状态;

我已经看过 http://msdn.microsoft.com/en-us/ library/7tas5c80.aspx 但我认为它的方式很复杂,并且没有显示如何显示一个单元格中的变量。

我不需要编辑的能力,只需要显示两个变量。

有人可以给我提供一个小例子吗?

我使用 C# 4.0 工作,它是 System.Windows.Forms.DataGridView

I have 2 variable I would like to display in one cell of a DataGridView.

Icon stockIcon;
Int stockStatus;

I already looked at http://msdn.microsoft.com/en-us/library/7tas5c80.aspx But I think its way to complicated and don't show how to display to variables in one cell.

I don't need the ability to edit, only display the two variables.

Could someone provide me with a small example?

I work in C# 4.0 and its a System.Windows.Forms.DataGridView

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

捎一片雪花 2024-09-15 22:55:27

这是我自己的解决方案。只需将列类型设置为 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);
        }
    }
}

Here is my own solution. Just set the Column type to LagerStatusColumn and it gets the job done.

 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);
        }
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文