
I have been trying to reduplicate this application and i am using vb.net. i followed all the tutorials and steps, but when i compile the app i get an error that Photo is not defined
<%@ Import Namespace="Data" %>
<%@ Import Namespace="Photo" %>
Data
Imports System
Imports System.Collections.Generic
Imports System.Drawing.Imaging
Imports System.IO
Imports System.Linq
Imports System.Web
Imports System.Drawing
Namespace Data
Public NotInheritable Class DataProvider
Private Sub New()
End Sub
<
ThreadStatic
()> _
Private Shared _photos As List(Of Photo)
Public Shared Function GetData() As IList(Of Photo)
If _photos IsNot Nothing Then
Return _photos
End If
_photos = New List(Of Photo)()
For Each files As String In Directory.GetFiles(HttpContext.Current.Server.MapPath("~/Images"))
Dim photo = New Photo() With { _
.Name = Path.GetFileName(files) _
}
Dim image__1 As Image = Image.FromFile(files)
Using memoryStream = New MemoryStream()
image__1.Save(memoryStream, ImageFormat.Png)
photo.Data = memoryStream.ToArray()
End Using
_photos.Add(photo)
Next
Return _photos
End Function
Public Shared Sub Update(ByVal photoId As Integer, ByVal name As String)
Dim first As Photo = _photos.FirstOrDefault(Function(p) p.Id = photoId)
If first IsNot Nothing Then
first.Name = name
End If
End Sub
End Class
End Namespace
Photo
Public Class Photo
Private Shared ReadOnly _key As New Object()
Private Shared _counter As Integer
Public Sub New()
Id = GetId()
End Sub
Public Property Name() As String
Get
Return m_Name
End Get
Set(ByVal value As String)
m_Name = Value
End Set
End Property
Private m_Name As String
Public Property Data() As Byte()
Get
Return m_Data
End Get
Set(ByVal value As Byte())
m_Data = Value
End Set
End Property
Private m_Data As Byte()
Public Property Id() As Integer
Get
Return m_Id
End Get
Private Set(ByVal value As Integer)
m_Id = Value
End Set
End Property
Private m_Id As Integer
Protected Shared Function GetId() As Integer
SyncLock _key
_counter += 1
End SyncLock
Return _counter
End Function
End Class
<
ItemTemplate
>
<
fieldset
style="float: left; margin: 5px 5px 5px 5px; padding: 2px 2px 2px 2px;
background: #eeeeee"
class
=
"myClass"
onmouseover
=
"containerMouseover(this)"
onmouseout
=
"containerMouseout(this)"
>
<
telerik:RadBinaryImage
Style
=
"cursor: pointer;"
runat
=
"server"
ID
=
"RadBinaryImage1"
DataValue='<%#Eval("Data") %>' Height='<%#ImageHeight %>' Width="<%#ImageWidth %>"
ResizeMode="Fit" onclick="<%#CreateWindowScript(DirectCast(Container.DataItem, Photo)) %>"
AlternateText="Click to view larger image" ToolTip="Click to view larger image" />
<
br
/>
<
div
style="margin-top: -30px; position: fixed; display: none; width: <%#ImageHeight.Value/1.5 %>px;">
<
asp:TextBox
runat
=
"server"
ID
=
"TextBox1"
Text='<%#Bind("Name") %>' CssClass="txt"
OnTextChanged="TextBox1_TextChanged" AutoPostBack="true" ToolTip="Edit image name" />
</
div
>
</
fieldset
>
</
ItemTemplate
>
What am i missing here..
Thanks in Advanced
TClemons
10 Answers, 1 is accepted
Do you have a namespace named "Photo"? You are trying to load it. I can only see a class named Photo, not an entire namespace.
Veli
the Telerik team

but this line of code in your sample on the onclick event of the radlistview
onclick="<%#CreateWindowScript(DirectCast(Container.DataItem, Photo)) %>"
Photo in this line is wht is not defined
this code was taken straight from your demo Imge Gallery Secnario using a RadListView.
This is a databinding expression that is evaluated when the template container is databound. In this context the Container (which is of type RadListViewDataItem) has a DataItem property data is the Photo instance the current item binds to. We use it to generate the onclick script for the image. If you are using a different data item type, you need to cast to it respectively.
Veli
the Telerik team

Do you get your local copy of the demos (that come with the Telerik RadControls installation bundle) working OK? You can compare changes with it, you should have the demos in the Telerik RadControls installation folder.
Veli
the Telerik team


Imports System
Imports System.Collections.Generic
Imports System.Drawing.Imaging
Imports System.IO
Imports System.Linq
Imports System.Web
Imports System.Drawing
Namespace Data
Public NotInheritable Class DataProvider
Private Sub New()
End Sub
<
ThreadStatic
()> _
Private Shared _photos As List(Of Photo)
Public Shared Function GetData() As IList(Of Photo)
If _photos IsNot Nothing Then
Return _photos
End If
_photos = New List(Of Photo)()
For Each file As String In Directory.GetFiles(HttpContext.Current.Server.MapPath("~/Images"))
Dim photo = New Photo() With { _
.Name = Path.GetFileName(file) _
}
Dim image__1 As Image = Image.FromFile(file)
Using memoryStream = New MemoryStream()
image__1.Save(memoryStream, ImageFormat.Png)
photo.Data = memoryStream.ToArray()
End Using
_photos.Add(photo)
Next
Return _photos
End Function
Public Shared Sub Update(ByVal photoId As Integer, ByVal name As String)
Dim first As Photo = _photos.FirstOrDefault(Function(p) p.Id = photoId)
If first IsNot Nothing Then
first.Name = name
End If
End Sub
End Class
Public Class Photo
Private Shared ReadOnly _key As New Object()
Private Shared _counter As Integer
Public Sub New()
Id = GetId()
End Sub
Public Property Name() As String
Get
Return m_Name
End Get
Set(ByVal value As String)
m_Name = Value
End Set
End Property
Private m_Name As String
Public Property Data() As Byte()
Get
Return m_Data
End Get
Set(ByVal value As Byte())
m_Data = Value
End Set
End Property
Private m_Data As Byte()
Public Property Id() As Integer
Get
Return m_Id
End Get
Private Set(ByVal value As Integer)
m_Id = Value
End Set
End Property
Private m_Id As Integer
Protected Shared Function GetId() As Integer
SyncLock _key
_counter += 1
End SyncLock
Return _counter
End Function
End Class
End Namespace
here is my web page
<%@ Page Language="VB" AutoEventWireup="false" CodeBehind="Image_Gallery.aspx.vb" Inherits="Graphics_Web.Image_Gallery" %>
<%@ Import Namespace="Data" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<
html
xmlns
=
"http://www.w3.org/1999/xhtml"
>
<
head
runat
=
"server"
>
<
title
></
title
>
<
telerik:RadStyleSheetManager
id
=
"RadStyleSheetManager1"
runat
=
"server"
/>
<
style
type
=
"text/css"
>
.myClass:hover
{
background-color: #a1da29 !important;
}
.txt
{
border: 0px !important;
background: #eeeeee !important;
color: Black !important;
margin-left: 25%;
margin-right: auto;
width: 100%;
filter: alpha(opacity=50); /* IE's opacity*/
opacity: 0.50;
text-align: center;
}
</
style
>
</
head
>
<
body
class
=
"BODY"
>
<
form
runat
=
"server"
id
=
"mainForm"
method
=
"post"
>
<
div
>
<
asp:ScriptManager
runat
=
"server"
ID
=
"ScriptManager1"
/>
<
telerik:RadAjaxLoadingPanel
runat
=
"server"
ID
=
"RadAjaxLoadingPanel1"
MinDisplayTime
=
"200"
/>
<
telerik:RadFormDecorator
runat
=
"server"
ID
=
"RadFormDecorator1"
DecoratedControls
=
"All"
/>
<
telerik:RadAjaxPanel
runat
=
"server"
ID
=
"RadAjaxPanel1"
LoadingPanelID
=
"RadAjaxLoadingPanel1"
>
<
telerik:RadListView
runat
=
"server"
ID
=
"RadListView1"
DataSourceID
=
"ObjectDataSource1"
AllowPaging
=
"true"
PageSize
=
"10"
DataKeyNames
=
"Id"
OverrideDataSourceControlSorting
=
"true"
>
<
LayoutTemplate
>
<
div
id
=
"list"
>
<
asp:Panel
runat
=
"server"
ID
=
"Panel1"
Style
=
"float: left; margin-left: 160px"
Visible="<%#Container.PageCount > 1 %>">
<
asp:Button
runat
=
"server"
ID
=
"PrevButton"
CommandName
=
"Page"
CommandArgument
=
"Prev"
Text
=
"Prev Page"
Enabled="<%#Container.CurrentPageIndex > 0 %>"/>
<
asp:Button
runat
=
"server"
ID
=
"NextButton"
CommandName
=
"Page"
CommandArgument
=
"Next"
Text
=
"Next Page"
Enabled="<%#Container.CurrentPageIndex < Container.PageCount - 1 %>"/>
</
asp:Panel
>
<
div
>
<
telerik:RadSlider
runat
=
"server"
ID
=
"RadSlider1"
MaximumValue
=
"3"
MinimumValue
=
"1"
Value
=
"2"
LiveDrag
=
"false"
SmallChange
=
"1"
AutoPostBack
=
"true"
OnValueChanged
=
"RadSlider1_ValueChanged"
Width
=
"150px"
CausesValidation
=
"false"
/>
</
div
>
<
div
style
=
"clear: both;"
>
</
div
>
<
fieldset
runat
=
"server"
id
=
"itemPlaceholder"
/>
<
div
style
=
"clear: both;"
>
</
div
>
</
div
>
</
LayoutTemplate
>
<
ItemTemplate
>
<
fieldset
style="float: left; margin: 5px 5px 5px 5px; padding: 2px 2px 2px 2px;
background: #eeeeee"
class
=
"myClass"
onmouseover
=
"containerMouseover(this)"
onmouseout
=
"containerMouseout(this)"
>
<
telerik:RadBinaryImage
Style
=
"cursor: pointer;"
runat
=
"server"
ID
=
"RadBinaryImage1"
DataValue='<%#Eval("Data") %>' Height='<%#ImageHeight %>' Width="<%#ImageWidth %>"
ResizeMode="Fit" onclick="<%#CreateWindowScript(DirectCast(Container.DataItem, Photo)) %>"
AlternateText="Click to view larger image" ToolTip="Click to view larger image" />
<
br
/>
<
div
style="margin-top: -30px; position: fixed; display: none; width: <%#ImageHeight.Value/1.5 %>px;">
<
asp:TextBox
runat
=
"server"
ID
=
"TextBox1"
Text='<%#Bind("Name") %>' CssClass="txt"
OnTextChanged="TextBox1_TextChanged" AutoPostBack="true" ToolTip="Edit image name" />
</
div
>
</
fieldset
>
</
ItemTemplate
>
</
telerik:RadListView
>
</
telerik:RadAjaxPanel
>
<
asp:ObjectDataSource
runat
=
"server"
ID
=
"ObjectDataSource1"
SelectMethod
=
"GetData"
TypeName
=
"Data.DataProvider"
></
asp:ObjectDataSource
>
<
telerik:RadWindowManager
runat
=
"server"
ID
=
"RadWindowManager1"
>
<
Windows
>
<
telerik:RadWindow
runat
=
"server"
ID
=
"Details"
VisibleStatusbar
=
"false"
NavigateUrl
=
"windovb.aspx"
Width
=
"635px"
Height
=
"530px"
AutoSize
=
"false"
Behaviors
=
"Close,Move"
ShowContentDuringLoad
=
"false"
Modal
=
"true"
>
</
telerik:RadWindow
>
</
Windows
>
</
telerik:RadWindowManager
>
<
script
type
=
"text/javascript"
>
function containerMouseover(sender) {
sender.getElementsByTagName("div")[0].style.display = "";
}
function containerMouseout(sender) {
sender.getElementsByTagName("div")[0].style.display = "none";
}
</
script
>
</
div
>
</
form
>
</
body
>
</
html
>
You need to fully qualify the Photo type in your markup:
<
telerik:RadBinaryImage
Style
=
"cursor: pointer;"
runat
=
"server"
ID
=
"RadBinaryImage1"
DataValue='<%#Eval("Data") %>' Height='<%#ImageHeight %>' Width="<%#ImageWidth %>"
ResizeMode="Fit" onclick="<%#CreateWindowScript(DirectCast(Container.DataItem, Data.Photo)) %>"
AlternateText="Click to view larger image" ToolTip="Click to view larger image" />
Attaching a sample application, showing the images OK.
Veli
the Telerik team

http://demos.telerik.com/aspnet-ajax/controls/examples/integration/listviewsliderwindowrotator/defaultcs.aspx?product=listview
I have 6 images files (extension .JPG) in Images folder.
the images are not populated to the RadListView on Default.aspx and windowcs.aspx.
Here my codes on Default.aspx:
<%
@ Page Title="" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<%
@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %>
<%
@ Import Namespace="Data" %>
<
asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" Runat="Server">
<style type="text/css">
.myClass:hover
{
background-color: #a1da29 !important;
}
.txt
{
border: 0px !important;
background: #eeeeee !important;
color: Black !important;
margin-left: 25%;
margin-right: auto;
width: 100%;
filter: alpha(opacity=50); /* IE's opacity*/
/* opacity: 0.50; */
text-align: center;
}
</style>
</
asp:Content>
<
asp:Content ID="Content2" ContentPlaceHolderID="MainContent" Runat="Server">
<div>
<asp:ScriptManager runat="server" ID="ScriptManager1" />
<telerik:RadAjaxLoadingPanel runat="server" ID="RadAjaxLoadingPanel1" MinDisplayTime="200" />
<telerik:RadFormDecorator runat="server" ID="RadFormDecorator1" DecoratedControls="All" />
<telerik:RadAjaxPanel runat="server" ID="RadAjaxPanel1" LoadingPanelID="RadAjaxLoadingPanel1">
<telerik:RadListView runat="server" ID="RadListView1" DataSourceID="ObjectDataSource1"
AllowPaging="True" DataKeyNames="Id"
OverrideDataSourceControlSorting="True">
<LayoutTemplate>
<div id="list">
<asp:Panel runat="server" ID="Panel1" Style="float: left; margin-left: 160px" Visible="<%#Container.PageCount > 1 %>">
<asp:Button runat="server" ID="PrevButton" CommandName="Page" CommandArgument="Prev"
Text="Prev Page" Enabled="<%#Container.CurrentPageIndex > 0 %>" />
<asp:Button runat="server" ID="NextButton" CommandName="Page" CommandArgument="Next"
Text="Next Page" Enabled="<%#Container.CurrentPageIndex < Container.PageCount - 1 %>" />
</asp:Panel>
<div>
<telerik:RadSlider runat="server" ID="RadSlider1" MaximumValue="3" MinimumValue="1"
Value="2" LiveDrag="false" SmallChange="1" AutoPostBack="true" OnValueChanged="RadSlider1_ValueChanged"
Width="150px" CausesValidation="false" />
</div>
<div style="clear: both;">
</div>
<fieldset runat="server" id="itemPlaceholder" />
<div style="clear: both;">
</div>
</div>
</LayoutTemplate>
<ItemTemplate>
<fieldset style="float: left; margin: 5px 5px 5px 5px; padding: 2px 2px 2px 2px;
position: relative; background: #eeeeee" class="myClass" onmouseover="containerMouseover(this)"
onmouseout="containerMouseout(this)">
 
 
<telerik:RadBinaryImage ID="RadBinaryImage1" Style="cursor: pointer; display:block;" runat="server"
DataValue='<%#Eval("Data") %>' Height='<%#ImageHeight %>' Width="<%#ImageWidth %>"
ResizeMode="Fit" onclick="<%#CreateWindowScript((Photo)Container.DataItem) %>"
AlternateText="Click to view larger image" ToolTip="Click to view larger image" />
 
 
<div style="margin-top: -30px; position: absolute; display: none; width: <%#ImageHeight.Value/1.5 %>px;">
<asp:TextBox runat="server" ID="TextBox1" Text='<%#Bind("Name") %>' CssClass="txt"
OnTextChanged="TextBox1_TextChanged" AutoPostBack="true" ToolTip="Edit image name" />
</div>
</fieldset>
</ItemTemplate>
</telerik:RadListView>
</telerik:RadAjaxPanel>
<asp:ObjectDataSource runat="server" ID="ObjectDataSource1" SelectMethod="GetData"
TypeName="Data.DataProvider"></asp:ObjectDataSource>
<telerik:RadWindowManager runat="server" ID="RadWindowManager1">
<Windows>
<telerik:RadWindow runat="server" ID="Details" VisibleStatusbar="false" NavigateUrl="windowcs.aspx"
Width="645px" Height="530px" AutoSize="false" Behaviors="Close,Move" ShowContentDuringLoad="false"
Modal="true">
</telerik:RadWindow>
</Windows>
</telerik:RadWindowManager>
<script type="text/javascript">
function containerMouseover(sender) {
sender.getElementsByTagName(
"div")[0].style.display = "";
}
function containerMouseout(sender) {
sender.getElementsByTagName(
"div")[0].style.display = "none";
}
</script>
</div>
 
</
asp:Content>
====================
code of windowcs.aspx:
<%
@ Page Title="" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="windowcs.aspx.cs" Inherits="windowcs" %>
<%
@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %>
<
asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" Runat="Server">
</
asp:Content>
<
asp:Content ID="Content2" ContentPlaceHolderID="MainContent" Runat="Server">
<div>
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<telerik:RadFormDecorator runat="server" ID="RadFormDecorator1" Skin="Black" DecoratedControls="All" />
<telerik:RadRotator runat="server" ID="RadRotator1" DataSourceID="ObjectDataSource1"
Skin="Black" RotatorType="ButtonsOver" Width="600px" Height="450px" ScrollDirection="Right,Left "
SlideShowAnimation-Type="Fade">
<ItemTemplate>
<%
#SetInitialIndex(Container) %>
<telerik:RadBinaryImage runat="server" ID="RadBinaryImage1" ResizeMode="Fit" Width="600px"
Height="600px" DataValue='<%#Eval("Data") %>'/>
</ItemTemplate>
</telerik:RadRotator>
<
asp:ObjectDataSource runat="server" ID="ObjectDataSource1" SelectMethod="GetData"
TypeName
="Data.DataProvider"></asp:ObjectDataSource>
</div>
</
asp:Content>
=====================================
code of DataProvider.cs
using
System;
using
System.Collections.Generic;
using
System.Drawing.Imaging;
using
System.IO;
using
System.Linq;
using
System.Web;
using
System.Drawing;
namespace
Data
{
public static class DataProvider
{
[
ThreadStatic]
private static List<Photo> _photos;
public static IList<Photo> GetData()
{
if (_photos != null)
{
return _photos;
}
_photos =
new List<Photo>();
foreach (var file in Directory.GetFiles(HttpContext.Current.Server.MapPath("~/Images")))
{
var photo = new Photo { Name = Path.GetFileName(file) };
Image image = Image.FromFile(file);
using (var memoryStream = new MemoryStream())
{
image.Save(memoryStream,
ImageFormat.Png);
photo.Data = memoryStream.ToArray();
}
_photos.Add(photo);
}
return _photos;
}
public static void Update(int photoId, string name)
{
Photo first;
if (_photos == null)
{
first = GetData().FirstOrDefault(p => p.Id == photoId); ;
}
first = _photos.FirstOrDefault(p => p.Id == photoId);
if (first != null)
{
first.Name = name;
}
}
}
public class Photo
{
private static readonly object _key = new object();
[
ThreadStatic]
private static int _counter;
public Photo()
{
Id = GetId();
}
public string Name { get; set; }
public byte[] Data { get; set; }
public int Id { get; private set; }
protected static int GetId()
{
lock (_key)
{
_counter++;
}
return _counter;
}
}
}
I reviewed your code and was not able to isolate anything obvious which may cause the issue you are facing. The image binding mechanism looks totally correct. Could you please open a regular support ticket and send us runnable version of your application so we could debug it locally and do our best to isolate the root cause of the problem.
All the best,
Maria Ilieva
the Telerik team