Search code examples
c#devexpressxtragriddevexpress-windows-ui

DevExpress Xtra Grid Cell Image Repeating Again and again


I am setting image in particular cells of grid on some condition but the images is repeated or showed as tiles not single image is shown, i want to show just one, i am unable to figure out why this is happening.

Screen shot:

enter image description here

Here is my code:

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);
    }
}

Here is inner methods :

private void SetTaskStatusColor(DevExpress.XtraGrid.Views.Grid.RowCellStyleEventArgs e, DataModel.TaskToConfirm task)
{
    e.Appearance.BackColor = System.Drawing.ColorTranslator.FromHtml("#FFFFFF");

    if (task.BillingConfirmed)
        e.Appearance.Image = imageListGrid.Images[0];
    else
        e.Appearance.Image = imageListGrid.Images[1];
}

private void SetPunctualityColor(DevExpress.XtraGrid.Views.Grid.RowCellStyleEventArgs e, DataModel.TaskToConfirm task)
{
    e.Appearance.BackColor = System.Drawing.ColorTranslator.FromHtml("#FFFFFF");

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

}


private void SetAttendanceColor(DevExpress.XtraGrid.Views.Grid.RowCellStyleEventArgs e, DataModel.TaskToConfirm task)
{
    e.Appearance.BackColor = System.Drawing.ColorTranslator.FromHtml("#FFFFFF");

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


}

Solution

  • I solved it myself with the help of my Senior Colleague by using DataSourceChanged Event and CustomUnboundColumnData event.

    Here is DataSourceChanged event, in which i added image columns from code behind as unbound columns and set their UnobundType to Object and have to set ColumnEdit Property to RespositotyItemPictureEdit object:

    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
            });
        }
    
    }  
    

    CustomUnboundColumnData event:

    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);
            }
        }
    

    Setting Image of Cells on some condition in method:

    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"];
    
    
        }