This is a migrated thread and some comments may be shown as answers.

2 urgent problems with binary image column

2 Answers 129 Views
Grid
This is a migrated thread and some comments may be shown as answers.
ManniAT
Top achievements
Rank 2
ManniAT asked on 07 Feb 2010, 05:42 PM
Hi,

I have two problems with the BinaryImage Column.
The first: how to use the thing with LInq? Shall I extend my Ling2Sql generated class to convert the image column to a format the BinaryImage column can handle? If so - how?
By the way - the thing is around more than half a year - and can still not work with Linq directly?
Not sooo important - it works when I bind to a SQL Source.

The bigger problem. As I commented at this sample
http://demos.telerik.com/aspnet-ajax/controls/examples/integration/raduploadinajaxifiedgrid/defaultcs.aspx?product=binaryimage
this is far away from reality. BUT - I guess this has something to with my problem.
The sample forces the user always to upload an image. This may be OK on insert operations.
But how about edit operations? The user made a mistake (typo) needs to change the text - and after the update the image is gone...

Or think about "long term" data. The user uploads an image, adds text....
After a longer period of time he has some additional information - and wants to add some text.
Unfortunately he has no access to the uploaded image...
Bad luck :)

I guess my customer is a bit sad if I tell him:
We will add an instruction like this:
You can only edit textual content when you can provide an image to upload. :)

To be clear:
I have a (if possible with the BinaryImage Column) Linq Datasource with an image (later there will be 2 images) and some text / date / number fields.
The user must be able to:
a.) Add a record with (or without) an image
--is there a simple way to provide a "No image" display?
b.) Edit a record without uploading a new (the old) image

That's all.

Thanks in advance
Manfred

2 Answers, 1 is accepted

Sort by
0
ManniAT
Top achievements
Rank 2
answered on 08 Feb 2010, 10:17 AM
Just a little update.
Since this is urgent I messed around a bit and thought about handling images in a popup.
So I wanted Grid only to display the current image.

To achive this I set the image field to ReadOnly=true.
Anyhow - editing a row clears the image :(

Regards
Manfred
0
Veli
Telerik team
answered on 11 Feb 2010, 08:47 AM
Hi ManniAT,

The fact that the demo you are referring to does not allow a record to be updated without re-uploading an image doesn't mean that you cannot implement a scenario in which file upload can be skipped on edit.

When RadGrid is updating, you can check if there is any file uploaded with the updated item. If no file was uploaded, you can skip modifying the data field holding the binary image data.

Additionally, the GridBinaryImageColumn.DefaultImageUrl property is used to show a default image (in this case a noimage indicator) if no binary image can be retrieved from RadGrid's data source.

As for LINQ, it's true that GridBinaryImageColumn does not currently support the default data type that is generated by the ORM designer for binary fields (System.Data.Linq.Binary). Therefore, you need to modify your data classes and specify that the binary data field should be of type byte[] instead. In terms of the ORM designer, you have to right-click on the field name, select Properties and choose byte[] for the data type.

Attaching a sample project you can test locally. It's got 2 pages - 1 with SqlDataSource, and another with LinqDataSource and data classes. In both cases, the image data is modified only if there is any data uploaded. For LINQ, this logic is implemented in the Image binary data property setter:

[Column(Storage = "_Data", DbType = "Image", UpdateCheck = UpdateCheck.Never)]
    public byte[] Data
    {
        get
        {
            return this._Data;
        }
        set
        {
            //if ((this._Data != value))
            if ((this._Data != value) && value != null && value.Length > 0)
            {
                this.OnDataChanging(value);
                this.SendPropertyChanging();
                this._Data = value;
                this.SendPropertyChanged("Data");
                this.OnDataChanged();
            }
        }
    }

You can check it out.

Kind regards,
Veli
the Telerik team

Watch a video on how to optimize your support resource searches and check out more tips on the blogs.
Follow the status of features or bugs in PITS and vote for them to affect their priority.
Tags
Grid
Asked by
ManniAT
Top achievements
Rank 2
Answers by
ManniAT
Top achievements
Rank 2
Veli
Telerik team
Share this question
or