Please refer this code.
I have used OnItemDataBound event for both DataList to convert the Byte Array in base64String format. On CheckChecked event i am selecting the Item Image URL which is in base64Format and converting it to Byte[] Array.
HTML
<form id="form1" runat="server">
<div>
<asp:DataList ID="DataList1" runat="server" OnItemDataBound="OnItemDataBound">
<HeaderTemplate>
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<th>
</th>
<th>
Id
</th>
<th>
Name
</th>
<th>
Image
</th>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<asp:CheckBox ID="CheckBox1" AutoPostBack="true" OnCheckedChanged="OnCheckedChanged"
runat="server" />
</td>
<td>
<asp:Label ID="lblId" Text='<%# Eval("Id") %>' runat="server" />
</td>
<td>
<asp:Label ID="lblName" Text='<%# Eval("Name") %>' runat="server" />
</td>
<td>
<asp:Image ID="imgImage" runat="server" />
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:DataList>
<br />
<hr />
<asp:DataList ID="DataList2" runat="server" OnItemDataBound="OnItemDataBound">
<HeaderTemplate>
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<th>
Id
</th>
<th>
Name
</th>
<th>
Image
</th>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<asp:Label ID="lblId" Text='<%# Eval("Id") %>' runat="server" />
</td>
<td>
<asp:Label ID="lblName" Text='<%# Eval("Name") %>' runat="server" />
</td>
<td>
<asp:Image ID="imgImage" runat="server" />
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:DataList>
</div>
</form>
Namespaces
using System.Configuration;
using System.Data.SqlClient;
using System.Data;
C#
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
this.Populate();
}
}
protected void OnCheckedChanged(object sender, EventArgs e)
{
CheckBox chk = sender as CheckBox;
DataTable dt = new DataTable();
if (chk.Checked)
{
DataListItem item = chk.NamingContainer as DataListItem;
if (ViewState["Data"] == null)
{
dt.Columns.AddRange(new DataColumn[3] { new DataColumn("Id", typeof(int)),
new DataColumn("Name", typeof(string)),
new DataColumn("Data",typeof(byte[])) });
string id = (item.FindControl("lblId") as Label).Text;
string name = (item.FindControl("lblName") as Label).Text;
string base64String = (item.FindControl("imgImage") as Image).ImageUrl;
byte[] bytes = Convert.FromBase64String(base64String.Split(',')[1]);
dt.Rows.Add(id, name, bytes);
}
else
{
dt = (DataTable)ViewState["Data"];
string id = (item.FindControl("lblId") as Label).Text;
string name = (item.FindControl("lblName") as Label).Text;
string base64String = (item.FindControl("imgImage") as Image).ImageUrl;
byte[] bytes = Convert.FromBase64String(base64String.Split(',')[1]);
dt.Rows.Add(id, name, bytes);
}
this.DataList2.DataSource = dt;
this.DataList2.DataBind();
ViewState["Data"] = dt;
}
}
protected void OnItemDataBound(object sender, DataListItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
byte[] bytes = (byte[])DataBinder.Eval(e.Item.DataItem, "Data");
string base64String = Convert.ToBase64String(bytes, 0, bytes.Length);
(e.Item.FindControl("imgImage") as Image).ImageUrl = "data:image/png;base64," + base64String;
}
}
private void Populate()
{
string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
using (SqlConnection con = new SqlConnection(constr))
{
using (SqlCommand cmd = new SqlCommand("SELECT TOP 2 * FROM tblFiles", con))
{
using (SqlDataAdapter da = new SqlDataAdapter(cmd))
{
DataTable dt = new DataTable();
da.Fill(dt);
DataList1.DataSource = dt;
DataList1.DataBind();
}
}
}
}
Database
CREATE TABLE [dbo].[tblFiles](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Name] [varchar](50) NULL,
[ContentType] [varchar](100) NULL,
[Data] [varbinary](max) NULL
) ON [PRIMARY]
GO
Screenshot
