How to display an image from the Blob table (data layer)
All pictures are stored in the BinaryObject table in the database. You can retrieve such information using SoCore and SoDatabase DLLs.
In the following example, we have displayed the Image description in ListBox. Based on the selection made by the user we would retrieve and display that image in a PictureBox.
Display image list
Following is the code for retrieving and displaying the image list in the ListBox.
using SuperOffice;
using SuperOffice.CRM.Rows;
//Method that displays the Image description on the Listbox
private void DisplayImageList()
{
using (SoSession newSoSession = SoSession.Authenticate("sam", "sam"))
{
//Retrieves a set of BinaryObjectRows whose MimeType = "image/jpeg"
BinaryObjectRows newBinObjRws = BinaryObjectRows.GetFromIdxMimeType("image/jpeg");
//Displays a list of Images Available
foreach (BinaryObjectRow newBinObjRw in newBinObjRws)
{
//Display the image description in the Listbox
listBox1.Items.Add(newBinObjRw.Description);
}
}
}
We have retrieved image-related information by using the BinaryObjectRows class. Since we are retrieving images that are of "image/jpeg", we have used the GetFromIdxMimeType method. By iterating on the retrieved row collection we have displayed the description of each image row in the list box.
Display selected image
Once the user selects an item from the ListBox the following code segment will be executed. This is responsible for displaying the image.
using System.IO;
using SuperOffice;
using SuperOffice.CRM.Rows;
using SuperOffice.Data;
using SuperOffice.CRM.Data;
//Method that is invoked when a item is selected from the Listbox
private void listBox1_SelectedValueChanged(object sender, EventArgs e)
{
using (SoSession newSoSession = SoSession.Authenticate("sam", "sam"))
{
//Instantiate a BinaryRowObject CustomSearch
BinaryObjectRow.CustomSearch newCusSearch = new BinaryObjectRow.CustomSearch();
//Instantiate BinaryObjectTableInfo class using the created CustomSearch
BinaryObjectTableInfo newBinObjTabInf = newCusSearch.TableInfo;
//Restricts the BinaryObjectTableInfo
newCusSearch.Restriction = newBinObjTabInf.Description.Equal(
S.Parameter(listBox1.SelectedItem.ToString())).
And(newBinObjTabInf.MimeType.Equal(S.Parameter("image/jpeg")));
//Retrieves the BinaryObjectRow based on the CustomSearch
BinaryObjectRow newBinObjRw = BinaryObjectRow.GetFromCustomSearch(newCusSearch);
//Gets the BinaryObjectRow's image into the stream and display it
Stream newStream = newBinObjRw.BinaryData;
pictureBox1.Image = Image.FromStream(newStream);
}
}
Since we are retrieving BinaryObjectRow based on the image description, we need to create a CustomSearch first to select the user-selected row. The search’s restriction should be applied to the MimeType and Description columns like this:
newCusSearch.Restriction = newBinObjTabInf.Description.Equal(
S.Parameter(listBox1.SelectedItem.ToString())).
And(newBinObjTabInf.MimeType.Equal(S.Parameter("image/jpeg")));
Once we have defined the CustomSearch, we can use it with the GetFromCustomSearch method available in the BinaryObjectRow class. We use the BinaryData property of the BinaryObjectRow class to fill our image into the Stream and then display it using the following statement.
pictureBox1.Image = Image.FromStream(newStream);