C# DevExpress Xtra网格单元格图像重复多次

C# DevExpress Xtra网格单元格图像重复多次,c#,devexpress,xtragrid,devexpress-windows-ui,C#,Devexpress,Xtragrid,Devexpress Windows Ui,我在某些条件下在网格的特定单元格中设置图像,但是图像重复或显示为平铺,没有显示单个图像,我只想显示一个,我无法理解为什么会发生这种情况 屏幕截图: 这是我的密码: private void PendingTask_RowCellStyle(object sender, DevExpress.XtraGrid.Views.Grid.RowCellStyleEventArgs e) { try { if (e.RowHandle < 0)

我在某些条件下在网格的特定单元格中设置图像,但是图像重复或显示为平铺,没有显示单个图像,我只想显示一个,我无法理解为什么会发生这种情况

屏幕截图:

这是我的密码:

private void PendingTask_RowCellStyle(object sender, DevExpress.XtraGrid.Views.Grid.RowCellStyleEventArgs e)
{
    try
    {
        if (e.RowHandle < 0)
            return;

        int con = PendingTaskGridView.SortedColumns.Count;

        DataModel.TaskToConfirm task = this.PendingTaskGridView.GetRow(e.RowHandle) as DataModel.TaskToConfirm;

        if (task == null)
            return;

        if (e.Column.Name.Equals("gridColBilling", StringComparison.InvariantCultureIgnoreCase))
        {

            SetTaskStatusColor(e, task);
            //SetTimeDifferenceColor(e, task);
        }

        if (e.Column.Name.Equals("gridColPunctuality", StringComparison.InvariantCultureIgnoreCase))
        {

            SetPunctualityColor(e, task);
            //SetTimeDifferenceColor(e, task);
        }

        if (e.Column.Name.Equals("gridColAttendance", StringComparison.InvariantCultureIgnoreCase))
        {

            SetAttendanceColor(e, task);
            //SetTimeDifferenceColor(e, task);
        }


    }
    catch (Exception ex)
    {
        ApplicationExceptions.HandleAppExc(ex);
    }
}

在这种情况下,
AppearanceObject.Image
属性用于指定单元格背景的填充模式。因此,您可以看到所有这些图像副本。
我建议您使用事件在单元格边界内绘制单个图像,或者使用编辑器指定属性以基于单元格值显示不同的图像

相关帮助文章:


在资深同事的帮助下,我自己用Event和Event解决了这个问题

下面是DataSourceChanged事件,在该事件中,我将来自code behind的图像列添加为未绑定列,并将其
UnboundType
设置为
Object
,并且必须将
ColumnEdit
属性设置为
ResposityItemPictureEdit
对象:

private void PendingTask_SourceChanged(object sender, EventArgs e)
    {

        AddImageColumns();           

    }
AddImageColumns():

private void AddImageColumns()
{
    RepositoryItemPictureEdit pictureEdit = this.PendingTaskGrid.RepositoryItems.Add("PictureEdit") as RepositoryItemPictureEdit;
    pictureEdit.SizeMode = PictureSizeMode.Zoom;
    PendingTaskGridView.OptionsView.AnimationType = GridAnimationType.AnimateAllContent;
    pictureEdit.NullText = " ";

    if (this.PendingTaskGridView.Columns.ColumnByName("StatusImage") == null)
    {
        this.PendingTaskGridView.Columns.Add(new DevExpress.XtraGrid.Columns.GridColumn()
        {
            Caption = " ",
            Name = "StatusImage",
            FieldName = "StatusImage",
            Visible = true,
            UnboundType = DevExpress.Data.UnboundColumnType.Object,
            VisibleIndex = 0,
            Width = 25,
            MaxWidth = 25,
            ToolTip = "Task Status",
            ColumnEdit = pictureEdit
        });
    }

    if (this.PendingTaskGridView.Columns.ColumnByName("PunctualityImage") == null)
    {
        this.PendingTaskGridView.Columns.Add(new DevExpress.XtraGrid.Columns.GridColumn()
        {
            Caption = " ",
            Name = "PunctualityImage",
            FieldName = "PunctualityImage",
            Visible = true,
            UnboundType = DevExpress.Data.UnboundColumnType.Object,
            VisibleIndex = 0,
            Width = 25,
            MaxWidth = 25,
            ToolTip = "Punctuality",
            ColumnEdit = pictureEdit
        });
    }

    if (this.PendingTaskGridView.Columns.ColumnByName("AttendanceImage") == null)
    {
        this.PendingTaskGridView.Columns.Add(new DevExpress.XtraGrid.Columns.GridColumn()
        {
            Caption = " ",
            Name = "AttendanceImage",
            FieldName = "AttendanceImage",
            Visible = true,
            UnboundType = DevExpress.Data.UnboundColumnType.Object,
            VisibleIndex = 0,
            Width = 25,
            MaxWidth = 25,
            ToolTip = "IVR Attendance",
            ColumnEdit = pictureEdit
        });
    }

}  
private void PendingTaskGridView_CustomUnboundColumnData(object sender, CustomColumnDataEventArgs e)
    {
        if (e.Column.FieldName.Equals("StatusImage", StringComparison.InvariantCultureIgnoreCase))
        {
            SetStatusImage(e);
        }
        if (e.Column.FieldName.Equals("PunctualityImage", StringComparison.InvariantCultureIgnoreCase))
        {
            SetPunctualityImage(e);
        }
        if (e.Column.FieldName.Equals("AttendanceImage", StringComparison.InvariantCultureIgnoreCase))
        {
            SetAttendanceImage(e);
        }
    }
private void SetStatusImage(CustomColumnDataEventArgs e)
    {
        DataModel.TaskToConfirm task = e.Row as DataModel.TaskToConfirm;            

        if (task.BillingConfirmed)
            e.Value = imageListGrid.Images[0];

        else
            e.Value = imageListGrid.Images[1];
    }



private void SetPunctualityImage(CustomColumnDataEventArgs e)
    {
        DataModel.TaskToConfirm task = e.Row as DataModel.TaskToConfirm;

        if (task.PunctualityStatus == (int)ePunctuality.Extra)
            e.Value = CareGiver.Properties.Resources.Cancelled_Image;
        else if (task.PunctualityStatus == (int)ePunctuality.Less)
            e.Value = CareGiver.Properties.Resources.Update_CSD;
        else
            e.Value = CareGiver.Properties.Resources.Category_Green;

    }



private void SetAttendanceImage(CustomColumnDataEventArgs e)
    {
        DataModel.TaskToConfirm task = e.Row as DataModel.TaskToConfirm;

        if (task.AttendanceType == 2)
            e.Value = imageList1.Images["auto"];
        else if (task.AttendanceType == 1)
            e.Value = imageList1.Images["manual"];
        else if (task.AttendanceType == 0)
            e.Value = imageList1.Images["default"];


    }
CustomUnboundColumnData事件:

private void AddImageColumns()
{
    RepositoryItemPictureEdit pictureEdit = this.PendingTaskGrid.RepositoryItems.Add("PictureEdit") as RepositoryItemPictureEdit;
    pictureEdit.SizeMode = PictureSizeMode.Zoom;
    PendingTaskGridView.OptionsView.AnimationType = GridAnimationType.AnimateAllContent;
    pictureEdit.NullText = " ";

    if (this.PendingTaskGridView.Columns.ColumnByName("StatusImage") == null)
    {
        this.PendingTaskGridView.Columns.Add(new DevExpress.XtraGrid.Columns.GridColumn()
        {
            Caption = " ",
            Name = "StatusImage",
            FieldName = "StatusImage",
            Visible = true,
            UnboundType = DevExpress.Data.UnboundColumnType.Object,
            VisibleIndex = 0,
            Width = 25,
            MaxWidth = 25,
            ToolTip = "Task Status",
            ColumnEdit = pictureEdit
        });
    }

    if (this.PendingTaskGridView.Columns.ColumnByName("PunctualityImage") == null)
    {
        this.PendingTaskGridView.Columns.Add(new DevExpress.XtraGrid.Columns.GridColumn()
        {
            Caption = " ",
            Name = "PunctualityImage",
            FieldName = "PunctualityImage",
            Visible = true,
            UnboundType = DevExpress.Data.UnboundColumnType.Object,
            VisibleIndex = 0,
            Width = 25,
            MaxWidth = 25,
            ToolTip = "Punctuality",
            ColumnEdit = pictureEdit
        });
    }

    if (this.PendingTaskGridView.Columns.ColumnByName("AttendanceImage") == null)
    {
        this.PendingTaskGridView.Columns.Add(new DevExpress.XtraGrid.Columns.GridColumn()
        {
            Caption = " ",
            Name = "AttendanceImage",
            FieldName = "AttendanceImage",
            Visible = true,
            UnboundType = DevExpress.Data.UnboundColumnType.Object,
            VisibleIndex = 0,
            Width = 25,
            MaxWidth = 25,
            ToolTip = "IVR Attendance",
            ColumnEdit = pictureEdit
        });
    }

}  
private void PendingTaskGridView_CustomUnboundColumnData(object sender, CustomColumnDataEventArgs e)
    {
        if (e.Column.FieldName.Equals("StatusImage", StringComparison.InvariantCultureIgnoreCase))
        {
            SetStatusImage(e);
        }
        if (e.Column.FieldName.Equals("PunctualityImage", StringComparison.InvariantCultureIgnoreCase))
        {
            SetPunctualityImage(e);
        }
        if (e.Column.FieldName.Equals("AttendanceImage", StringComparison.InvariantCultureIgnoreCase))
        {
            SetAttendanceImage(e);
        }
    }
private void SetStatusImage(CustomColumnDataEventArgs e)
    {
        DataModel.TaskToConfirm task = e.Row as DataModel.TaskToConfirm;            

        if (task.BillingConfirmed)
            e.Value = imageListGrid.Images[0];

        else
            e.Value = imageListGrid.Images[1];
    }



private void SetPunctualityImage(CustomColumnDataEventArgs e)
    {
        DataModel.TaskToConfirm task = e.Row as DataModel.TaskToConfirm;

        if (task.PunctualityStatus == (int)ePunctuality.Extra)
            e.Value = CareGiver.Properties.Resources.Cancelled_Image;
        else if (task.PunctualityStatus == (int)ePunctuality.Less)
            e.Value = CareGiver.Properties.Resources.Update_CSD;
        else
            e.Value = CareGiver.Properties.Resources.Category_Green;

    }



private void SetAttendanceImage(CustomColumnDataEventArgs e)
    {
        DataModel.TaskToConfirm task = e.Row as DataModel.TaskToConfirm;

        if (task.AttendanceType == 2)
            e.Value = imageList1.Images["auto"];
        else if (task.AttendanceType == 1)
            e.Value = imageList1.Images["manual"];
        else if (task.AttendanceType == 0)
            e.Value = imageList1.Images["default"];


    }
在方法:

private void AddImageColumns()
{
    RepositoryItemPictureEdit pictureEdit = this.PendingTaskGrid.RepositoryItems.Add("PictureEdit") as RepositoryItemPictureEdit;
    pictureEdit.SizeMode = PictureSizeMode.Zoom;
    PendingTaskGridView.OptionsView.AnimationType = GridAnimationType.AnimateAllContent;
    pictureEdit.NullText = " ";

    if (this.PendingTaskGridView.Columns.ColumnByName("StatusImage") == null)
    {
        this.PendingTaskGridView.Columns.Add(new DevExpress.XtraGrid.Columns.GridColumn()
        {
            Caption = " ",
            Name = "StatusImage",
            FieldName = "StatusImage",
            Visible = true,
            UnboundType = DevExpress.Data.UnboundColumnType.Object,
            VisibleIndex = 0,
            Width = 25,
            MaxWidth = 25,
            ToolTip = "Task Status",
            ColumnEdit = pictureEdit
        });
    }

    if (this.PendingTaskGridView.Columns.ColumnByName("PunctualityImage") == null)
    {
        this.PendingTaskGridView.Columns.Add(new DevExpress.XtraGrid.Columns.GridColumn()
        {
            Caption = " ",
            Name = "PunctualityImage",
            FieldName = "PunctualityImage",
            Visible = true,
            UnboundType = DevExpress.Data.UnboundColumnType.Object,
            VisibleIndex = 0,
            Width = 25,
            MaxWidth = 25,
            ToolTip = "Punctuality",
            ColumnEdit = pictureEdit
        });
    }

    if (this.PendingTaskGridView.Columns.ColumnByName("AttendanceImage") == null)
    {
        this.PendingTaskGridView.Columns.Add(new DevExpress.XtraGrid.Columns.GridColumn()
        {
            Caption = " ",
            Name = "AttendanceImage",
            FieldName = "AttendanceImage",
            Visible = true,
            UnboundType = DevExpress.Data.UnboundColumnType.Object,
            VisibleIndex = 0,
            Width = 25,
            MaxWidth = 25,
            ToolTip = "IVR Attendance",
            ColumnEdit = pictureEdit
        });
    }

}  
private void PendingTaskGridView_CustomUnboundColumnData(object sender, CustomColumnDataEventArgs e)
    {
        if (e.Column.FieldName.Equals("StatusImage", StringComparison.InvariantCultureIgnoreCase))
        {
            SetStatusImage(e);
        }
        if (e.Column.FieldName.Equals("PunctualityImage", StringComparison.InvariantCultureIgnoreCase))
        {
            SetPunctualityImage(e);
        }
        if (e.Column.FieldName.Equals("AttendanceImage", StringComparison.InvariantCultureIgnoreCase))
        {
            SetAttendanceImage(e);
        }
    }
private void SetStatusImage(CustomColumnDataEventArgs e)
    {
        DataModel.TaskToConfirm task = e.Row as DataModel.TaskToConfirm;            

        if (task.BillingConfirmed)
            e.Value = imageListGrid.Images[0];

        else
            e.Value = imageListGrid.Images[1];
    }



private void SetPunctualityImage(CustomColumnDataEventArgs e)
    {
        DataModel.TaskToConfirm task = e.Row as DataModel.TaskToConfirm;

        if (task.PunctualityStatus == (int)ePunctuality.Extra)
            e.Value = CareGiver.Properties.Resources.Cancelled_Image;
        else if (task.PunctualityStatus == (int)ePunctuality.Less)
            e.Value = CareGiver.Properties.Resources.Update_CSD;
        else
            e.Value = CareGiver.Properties.Resources.Category_Green;

    }



private void SetAttendanceImage(CustomColumnDataEventArgs e)
    {
        DataModel.TaskToConfirm task = e.Row as DataModel.TaskToConfirm;

        if (task.AttendanceType == 2)
            e.Value = imageList1.Images["auto"];
        else if (task.AttendanceType == 1)
            e.Value = imageList1.Images["manual"];
        else if (task.AttendanceType == 0)
            e.Value = imageList1.Images["default"];


    }

感谢您的回复,但我通过其他方式解决了这个问题,我也将其发布为答案NP,但根据我的经验,使用RepositoryImageCombobox比创建未绑定列要有效得多…我对devexpress控件非常陌生,我的高级同事指导我这样做…:)但我感谢您的努力…:)