图像和值进入GridView单元格

时间:2017-04-06 15:01:25

标签: c# winforms gridview devexpress

我有一个XtraGridview绑定到通过Linq的数据源,当我检查一些复选框时,我需要将图像设置为单元格及其已有的值。 现在,当我选中复选框时,我在单元格中设置图像就好了但是消除了单元格值(数据)。 在CustomDrawCell事件上,我这样做

private void gridView_GD_CustomDrawCell(object sender, RowCellCustomDrawEventArgs e)
        {            
                GridView view = sender as GridView;
                string evento1 = Convert.ToString(view.GetRowCellValue(e.RowHandle, "Eve1"));

            if (CVariables.Ficon_estado == 1)
            {
                if (evento1 == "06" || evento1 == "15")
                {
                    if (e.Column.FieldName == "G1")
                    {
                        e.Handled = true;
                        Point pos = CalcPosition(e, imageCollection_16.Images[1]);
                        e.Graphics.DrawImage(imageCollection_16.Images[1], pos);
                        view.Columns["G1"].AppearanceCell.BackColor = Color.Transparent;
                        view.Columns["G1"].AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Far;                        
                    }
                }
            }
            else
            {
                view.Columns["G1"].AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
            }
}

 private Point CalcPosition(RowCellCustomDrawEventArgs e, Image img)
        {
            Point p = new Point();
            p.X = e.Bounds.Location.X + (e.Bounds.Width - (img.Width * 3)) / 2;
            p.Y = e.Bounds.Location.Y + (e.Bounds.Height - img.Height) / 2;
            return p;
        }

I post an image to illustrate what i want

1 个答案:

答案 0 :(得分:0)

由于您将 e.Handled 属性设置为true,因此单元格文本消失。设置此选项时,不会调用默认绘制机制。您仍然可以使用 e.Appearance.DrawString 方法手动绘制单元格文本。

e.Appearance.DrawString(e.Cache, e.DisplayText, e.Bounds);

另一种解决方案是使用RepositoryItemTextEdit.ContextImage显示图像。也就是说,您可以使用不同的上下文图像创建两个 RepositoryItemTextEdits ,并在GridView.CustomRowCellEdit事件处理程序中有条件地将它们分配给网格单元格。