Tables:
Create Database with the name as "NestedGridView" and create following tables in
that database.
Stored Procedures:
Create
Procedure sp_GetFileDetails
(
@FileId
int
)
AS
Begin
select
* from tbl_Files
where FileId = @FileId
End
Create
procedure sp_GetFilesFromCart
As
begin
select
* from tbl_Cart
c inner join
tbl_Files f on
f.FileId = c.FileId
end
Create
procedure sp_GetPrintSize
As
Begin
select
* from
tbl_PrintSize
End
Web.config:
<connectionStrings>
<add
name="constr"
connectionString="User
Id = sa; Password = 123; Database = NestedGridView; Data Source = server2"/>
</connectionStrings>
Classes:
1. Connection Class:
public
class Connection
{
public static
string GetConnectionString()
{
return
ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
}
}
2. Data Access Layer Class:
public
class DAL
{
static
SqlConnection con;
static
SqlCommand cmd;
static DataSet
ds;
static
SqlDataAdapter da;
public static
DataSet ExecuteDataSet(string
connectionString, CommandType commandType,
string commandText,SqlParameter[]
parameters)
{
try
{
con = new
SqlConnection(connectionString);
cmd = new
SqlCommand();
cmd.Connection = con;
cmd.CommandText = commandText;
cmd.CommandType = commandType;
if (parameters ==
null)
{
da = new
SqlDataAdapter(cmd);
ds = new
DataSet();
da.Fill(ds);
return ds;
}
else
{
foreach (SqlParameter
p in parameters)
{
if ((p.Direction ==
ParameterDirection.InputOutput) && (p.Value
== null))
{
}
cmd.Parameters.Add(p);
}
da = new
SqlDataAdapter(cmd);
ds = new
DataSet();
da.Fill(ds);
return ds;
}
}
catch (SqlException
ex)
{
throw new
ArgumentException(ex.Message);
}
}
}
3. Business Object Layer Class:
public
class BOL
{
public static
DataSet GetFilesFromCart()
{
try
{
SqlParameter[] p =
new SqlParameter[0];
return
DAL.ExecuteDataSet(Connection.GetConnectionString(),
CommandType.StoredProcedure,
"[sp_GetFilesFromCart]", p);
}
catch (Exception
ex) { throw new
ArgumentException(ex.Message); }
}
public static
DataSet GetPrintSize()
{
try
{
SqlParameter[] p =
new SqlParameter[0];
return
DAL.ExecuteDataSet(Connection.GetConnectionString(),
CommandType.StoredProcedure,
"sp_GetPrintSize", p);
}
catch (Exception
ex)
{
throw new
ArgumentException(ex.Message);
}
}
public static
DataSet GetFileDetails(int
fileId)
{
try
{
SqlParameter[] p =
new SqlParameter[1];
p[0] = new
SqlParameter("@FileId",
fileId);
return
DAL.ExecuteDataSet(Connection.GetConnectionString(),
CommandType.StoredProcedure,
"sp_GetFileDetails", p);
}
catch (Exception
ex)
{
throw new
ArgumentException(ex.Message);
}
}
}
Default.aspx
Page Source Code:
<asp:GridView
ID="GridView1"
runat="server"
AutoGenerateColumns="False"
ShowHeader="true"
Width="500px"
onrowdatabound="GridView1_RowDataBound">
<Columns>
<asp:TemplateField
ItemStyle-BorderStyle="None"
HeaderText="S No"
ItemStyle-Font-Bold="true">
<ItemTemplate>
<%#
Container.DataItemIndex + 1 %>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField
HeaderText="Selected
Photos">
<ItemTemplate>
<table>
<tr>
<td
valign="middle">
<asp:ImageButton
ID="ImageButton1"
Enabled="false"
CommandName="selectedimg"
ImageUrl='<%#
"~/Thumbnail.ashx?fileId="+Eval("FileId") %>'
CommandArgument='<%#
Eval("FileId") %>'
runat="server">
</asp:ImageButton>
</td>
</tr>
</table>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField
HeaderText="Print
Options">
<ItemTemplate>
<asp:GridView
ID="GridView2"
runat="server"
ShowHeader="true"
Width="300px"
AutoGenerateColumns="false">
<Columns>
<asp:TemplateField
HeaderText="Qty">
<ItemTemplate>
<asp:TextBox
ID="TextBox1"
MaxLength="3"
ValidationGroup="add"
Width="35"
onkeydown="return
CheckKeyCode()" runat="server"></asp:TextBox>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField
HeaderText="Size">
<ItemTemplate>
<asp:LinkButton
ID="LinkButton1"
ForeColor="AliceBlue"
CommandName="lbtnsize"
Enabled="false"
Text='<%#
Eval("SizeName") %>'
CommandArgument='<%#
Eval("SizeId") %>'
runat="server"></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField
HeaderText="Price(1
Qty)">
<ItemTemplate>
<asp:LinkButton
ID="LinkButton2"
ForeColor="AliceBlue"
Text='<%#
Eval("Price") %>'
Enabled="false"
CommandName="lbtnprice"
CommandArgument='<%#
Eval("SizeId") %>'
runat="server"></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField
HeaderText="TotalPrice">
<ItemTemplate>
<asp:Label
ID="Label2"
runat="server"
Text=""></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
Default.aspx.cs CodeBehind:
protected
void Page_Load(object
sender, EventArgs e) {
if (!IsPostBack)
{
DataSet ds =
BOL.GetFilesFromCart();
GridView1.DataSource = ds;
GridView1.DataBind();
}
}
protected void
GridView1_RowDataBound(object sender,
GridViewRowEventArgs e)
{
if (e.Row.RowType ==
DataControlRowType.DataRow)
{
GridView gv = (GridView)e.Row.FindControl("GridView2");
DataSet ds1 =
BOL.GetPrintSize();
ImageButton ib = (ImageButton)e.Row.FindControl("ImageButton1");
gv.DataSource = ds1;
gv.DataBind();
}
}
Thumbnail.ashx:
<%@
WebHandler Language="C#"
Class="Thumbnail"
%>
using
System;
using
System.Web;
using
System.Data;
using
System.Data.SqlClient;
using
System.Drawing;
using
System.IO;
public
class Thumbnail
: IHttpHandler {
public void
ProcessRequest (HttpContext context) {
if (context.Request.QueryString["fileId"].ToString()
== "")
{ }
else
{
int fileId =
Convert.ToInt32(context.Request.QueryString["fileId"]);
if (fileId != 0)
{
DataSet ds =
BOL.GetFileDetails(fileId);
if (ds.Tables[0].Rows[0]["FileContent"]
!= System.DBNull.Value)
{
byte[] image = (byte[])ds.Tables[0].Rows[0]["FileContent"];
System.IO.MemoryStream ms
= new System.IO.MemoryStream();
ms.Write(image, 0, image.Length);
context.Response.Buffer = true;
if (image.Length != 0)
{
Bitmap loBMP = new
Bitmap(ms);
int wid = loBMP.Width;
if (wid > 120) { wid = 120; }
int hei = loBMP.Height;
if (hei > 100) { hei = 100; }
Bitmap bmpOut = new
Bitmap(wid, hei);
Graphics g =
Graphics.FromImage(bmpOut);
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
g.FillRectangle(Brushes.White,
0, 0, wid, hei);
g.DrawImage(loBMP, 0, 0, wid, hei);
MemoryStream ms2 = new
MemoryStream();
bmpOut.Save(ms2, System.Drawing.Imaging.ImageFormat.Jpeg);
byte[] bmpBytes = ms2.GetBuffer();
bmpOut.Dispose();
ms2.Close();
context.Response.Clear();
context.Response.BinaryWrite(bmpBytes);
context.Response.End();
}
ms.Dispose();
}
}
}
}
public bool
IsReusable {
get {
return
false;
}
}
}