<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.