-1

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


}
Ehsan Sajjad
  • 61,834
  • 16
  • 105
  • 160

2 Answers2

0

The AppearanceObject.Image property is used to specify fill-pattern of cell background in this case. Thus you can see all of these image duplicates.
I suggest you use GridView.CustomDrawCell event to paint single image within a cell bounds or assign the GridColumn.ColumnEdit property with the RepositoryItemImageComboBox editor to display different images based on cell value.

Related help-articles:
Custom Painting
Assigning Editors to Individual Cells

DmitryG
  • 17,677
  • 1
  • 30
  • 53
-1

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


    }
Ehsan Sajjad
  • 61,834
  • 16
  • 105
  • 160