<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" Runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="LeftContent" Runat="Server">
</asp:Content>
<asp:Content ID="Content3" ContentPlaceHolderID="MainContent" Runat="Server">
<asp:SqlDataSource ID="DSProduct" runat="server"> </asp:SqlDataSource>
<asp:SqlDataSource ID="DSSize" runat="server" > </asp:SqlDataSource>
<asp:Repeater ID="Repeater1" runat="server" DataSourceID="DSProduct"
onitemcommand="Repeater1_ItemCommand" >
<ItemTemplate>
<br />
<asp:Image ID="Image1" runat="server"
ImageUrl='<%#Eval("image2","~/Image/{0}") %>'
Height="230" Width="230"
CssClass="largeimage" />
<h3 style="color: #FFFFFF; font-weight: bold; ">
<asp:Label ID="LName" runat="server" Text='<%# Eval("product_name")%>'>
</asp:Label>
<asp:Label ID="LPrice" style="text-decoration: line-through;" runat="server"
Text='<% # Convert.ToDecimal(Eval("price")).ToString("£#,##0.00") %>' Font-Size="Small" ForeColor = "Blue" >
</asp:Label>
<asp:Label ID="Label4" runat="server" Text=" £ " ForeColor="Red" BackColor="White">
</asp:Label>
<asp:Label ID="LPrice_disc" runat="server" Text='<%#
Convert.ToDecimal(Eval("discount_price")).ToString("#,##0.00")
%>'
BackColor="White" ForeColor = "Red">
</asp:Label>
<asp:Label ID="LID" runat="server"
Text='<%# Eval("product_id") %>' Visible="False">
</asp:Label> </h4>
<asp:SqlDataSource ID="DSColour"
runat="server"
ConnectionString="<%$ ConnectionStrings:XXX
%>"
ProviderName="<%$ ConnectionStrings:XXX.ProviderName
%>"
SelectCommand="select colour_id, colour_name from
colour">
</asp:SqlDataSource>
<asp:DropDownList ID="DDListColour"
runat="server"
DataSourceID="DSColour"
DataTextField="colour_name"
DataValueField="colour_id"
AppendDataBoundItems="true"
OnSelectedIndexChanged="colour_SelectedIndexChanged"
AutoPostBack="True" >
</asp:DropDownList>
<asp:SqlDataSource ID="DSSize"
runat="server"
ConnectionString="<%$ ConnectionStrings:XXX
%>"
ProviderName="<%$ ConnectionStrings:XXX.ProviderName
%>"
SelectCommand="select size_id, size_name from
size_t">
</asp:SqlDataSource>
<asp:DropDownList ID="DropDownListSize"
runat="server"
DataSourceID="DSSize"
DataTextField="size_name"
DataValueField="size_id"
AutoPostBack="True" >
</asp:DropDownList>
<asp:Label ID="Label1" runat="server"
Text='<%# Eval("product_id") %>' Visible="True">
</asp:Label>
<h5 style="color: #000000; font-weight:
normal;" >
<asp:Label ID="Ldesc" runat="server"
Text='<%# Eval("product_description")%>' Width="500"
Font-Size="Medium" Font-Bold="True">
</asp:Label></h5>
<asp:ImageButton ID="Button1"
runat="server"
CssClass="addcart" ImageUrl="~/Image/btn_buy.gif"
/>
</ItemTemplate>
</asp:Repeater>
</asp:Content>
Please find below the code for the code behind file:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
public partial class Product : System.Web.UI.Page
{
private string DataValueField;
private string Colour;
protected void Page_Load(object sender, EventArgs e)
{
String pid = Request.QueryString["pid"];
DSProduct.ConnectionString = "Data Source=X;Persist
Security Info=True;User ID=Y;Password=Z";
DSProduct.ProviderName =
"System.Data.OracleClient";
DSProduct.SelectCommand = "SELECT * FROM Product WHERE
product_id= '" + pid + "'";
}
protected void Repeater1_ItemCommand(object source,
RepeaterCommandEventArgs e)
{
string url = HttpContext.Current.Request.Url.AbsoluteUri;
Boolean flag_found;
int i;
DataTable LocalCart = new DataTable();
LocalCart.Columns.Add("Colour",typeof(String));
DataRow dr;
Session["curURL"] = url;
if (Session["username"] == null)
Response.Redirect("login.aspx");
LocalCart = (DataTable)Session["cart"];
int LocalCartItemCount =
(int)Session["CartItemCount"];
Decimal LocalCartAmount = (Decimal)Session["CartAmount"];
flag_found = false;
for (i = 0; i < LocalCart.Rows.Count; i++)
{
if
(LocalCart.Rows[i]["ID"].Equals(((Label)e.Item.FindControl("LID")).Text.ToString()))
{
LocalCart.Rows[i]["Quantity"] =
Convert.ToInt32(LocalCart.Rows[i]["Quantity"]) + 1;
LocalCart.Rows[i]["Subtotal"] =
Convert.ToInt32(LocalCart.Rows[i]["Quantity"]) *
Convert.ToDecimal(LocalCart.Rows[i]["Price"]);
flag_found = true;
break;
}
}
if (!flag_found)
{
dr = LocalCart.NewRow();
dr["ID"] = ((Label)e.Item.FindControl("LID")).Text.ToString();
dr["Name"] =
((Label)e.Item.FindControl("LName")).Text.ToString();
dr["Price"] =
Convert.ToDecimal(((Label)e.Item.FindControl("LPrice_disc")).Text.ToString());
dr["Quantity"] = 1;
dr["Subtotal"] =
Convert.ToDecimal(dr["Price"]);
dr["Colour"] =
((DropDownList)e.Item.FindControl("DDListColour")).SelectedValue;
LocalCart.Rows.Add(dr);
}
LocalCartItemCount++;
LocalCartAmount +=
Convert.ToDecimal(((Label)e.Item.FindControl("LPrice_disc")).Text.ToString());
Session["Cart"] = LocalCart;
Session["CartAmount"] = LocalCartAmount;
Session["CartItemCount"] = LocalCartItemCount;
Response.Redirect("CartDisp.aspx");
}
}
Like I said I am having the following error (related to the
'Colour' column that is not recognised for some reason):
Exception Details: System.ArgumentException: Column 'Colour'
does not belong to table .
Source Error:
Line 62: dr["Quantity"] = 1; Line 63:
dr["Subtotal"] = Convert.ToDecimal(dr["Price"]); Line 64:
dr["Colour"] =
((DropDownList)e.Item.FindControl("DDListColour")).SelectedValue;
Line 65: LocalCart.Rows.Add(dr);
Thank you in advance.
Anonymous User
27-Nov-2014I have found a solution, I have followed the hint given by Rick. However this causes another issue: that when you add a column below the if statement, the second time the code runs you will receive an error message because the column already exists. I have found a way around, that you can find below.