possible .NET 2 compatability issue

B

bne

Hi All,

I have a shopping cart app that (I think) has broken due to an upgrade
to .NET 2.0.

Some products display fine:
<http://ukweddinggroup.com/default.aspx?prd=11>

Others display okay but validation on the dropdown list options break:
<http://ukweddinggroup.com/default.aspx?prd=249>

And still others completely wipe out with "System.ArgumentException: An
entry with the same key already exists":
<http://ukweddinggroup.com/default.aspx?prd=420>

The drop down list controls are created dynamically depending on what
options are available for each product in the database.

I'm presuming that there is a bug somewhere that was forgiven by .NET
1.1 but has now cropped up in .NET 2.0

The code that the runtime error objects to is:
System.ArgumentException: An entry with the same key already exists.

------------------------------------------------------

@&nbsp;<span id="itemPriceIndicator"><%= this.ItemPrice.ToString("c")
%></span></strong></span>

------------------------------------------------------

ItemPrice is from an overridden page control used across the site:

------------------------------------------------------

public decimal ItemPrice
{
get
{
object o = ViewState["ItemPrice"];
if(o == null)
{
return 0.0M;
}
return (decimal)o;
}
set
{
ViewState["ItemPrice"] = value;
}
}

------------------------------------------------------

The code where I think something is going wrong is:

------------------------------------------------------

private void rptProductOptions_ItemCreated(object sender,
RepeaterItemEventArgs e)
{
if(e.Item != null && (e.Item.ItemType == ListItemType.Item ||
e.Item.ItemType == ListItemType.AlternatingItem))
{
PlaceHolder plh = (PlaceHolder)e.Item.FindControl("plhControl");
DataSet dsProductOptionData = this.ProductOptionData();
DataRow drOptionGroup =
dsProductOptionData.Tables["OptionGroup"].Rows[e.Item.ItemIndex];
DataView dvOptions = new DataView(
dsProductOptionData.Tables["Option"],
String.Format("OptionGroupID = {0}", drOptionGroup["ID"]),
"Incidence",
DataViewRowState.OriginalRows);

// JS price array
foreach(DataRowView drv in dvOptions)
{
RegisterArrayDeclaration("aPrice", drv["Price"].ToString());
}

bool mandatory = Convert.ToBoolean(drOptionGroup["Mandatory"]);
HYL.Cart.OptionGroupType type =
(HYL.Cart.OptionGroupType)Enum.Parse(typeof(HYL.Cart.OptionGroupType),
drOptionGroup["Type"].ToString());
RequiredFieldValidator rfv;

if(type == OptionGroupType.List || type ==
OptionGroupType.MultipleList)
{
#region Lists
// display checkbox as only 1 option
if(dvOptions.Count == 1)
{
CheckBox cbx = new CheckBox();
if(mandatory)
{
cbx.Checked = true;
cbx.Enabled = false;
this.ItemPrice += Convert.ToDecimal(dvOptions[0]["Price"]);
}
else
{
cbx.Attributes.Add("onclick", "UpdatePrice();");
}
cbx.Text = dvOptions[0]["Description"].ToString();
cbx.CssClass = "ProductOption";

plh.Controls.Add(cbx);
}
else if(dvOptions.Count > 1) // display drop down list/listbox
{
if(type == HYL.Cart.OptionGroupType.MultipleList)
{
ListBox lbx = new ListBox();
lbx.Attributes.Add("onchange", "UpdatePrice();");
lbx.CssClass = "ProductOption";
lbx.Rows = 5;
lbx.SelectionMode = ListSelectionMode.Multiple;
lbx.DataTextField = "Description";
lbx.DataValueField = "ID";
lbx.DataSource = dvOptions;
lbx.DataBind();

plh.Controls.Add(lbx);

// to add client id after everything has finished databinding
lbx.PreRender += new EventHandler(lbx_PreRender);

if(mandatory)
{
rfv = new RequiredFieldValidator();
rfv.CssClass = "errText";
rfv.Display = ValidatorDisplay.Dynamic;
rfv.Text = "Please select an option.<br>";
rfv.ControlToValidate = lbx.ClientID;

plh.Controls.AddAt(0, rfv);
}
}
else
{
DropDownList ddl = new DropDownList();
ddl.Attributes.Add("onchange", "UpdatePrice();");
ddl.CssClass = "ProductOption";
ddl.DataTextField = "Description";
ddl.DataValueField = "ID";
ddl.DataSource = dvOptions;
ddl.DataBind();

plh.Controls.Add(ddl);

// to add blank option and client id after everything has
finished databinding
ddl.PreRender += new EventHandler(ddl_PreRender);

if(mandatory)
{
rfv = new RequiredFieldValidator();
rfv.CssClass = "errText";
rfv.Display = ValidatorDisplay.Dynamic;
rfv.Text = "Please select an option.<br>";
rfv.ControlToValidate = ddl.ClientID;
rfv.InitialValue = "0";

plh.Controls.AddAt(0, rfv);
}
}
}
#endregion
}
else if(type == OptionGroupType.IntegerInput || type ==
OptionGroupType.StringInput)
{
#region TextBoxes
TextBox txt = new TextBox();

if(type == OptionGroupType.IntegerInput)
{
txt.CssClass = "txtFieldSm";
}
else
{
txt.CssClass = "txtField";
txt.TextMode = TextBoxMode.MultiLine;
}

plh.Controls.Add(txt);
txt.PreRender += new EventHandler(txt_PreRender);

if(mandatory)
{
if(type == OptionGroupType.IntegerInput)
{
CompareValidator cmpv = new CompareValidator();
cmpv.CssClass = "errText";
cmpv.Display = ValidatorDisplay.Dynamic;
cmpv.Text = "Please enter a valid number.<br>";
cmpv.Type = ValidationDataType.Integer;
cmpv.Operator = ValidationCompareOperator.DataTypeCheck;
cmpv.ControlToValidate = txt.ClientID;

plh.Controls.AddAt(0, cmpv);
}
else
{
rfv = new RequiredFieldValidator();
rfv.CssClass = "errText";
rfv.Display = ValidatorDisplay.Dynamic;
rfv.Text = "Please enter a value.<br>";
rfv.ControlToValidate = txt.ClientID;

plh.Controls.AddAt(0, rfv);
}
}
#endregion
}
else if(type == OptionGroupType.DateInput)
{
#region Date Drop Downs

HYL.Web.Controls.DateDropDown ddd = new
HYL.Web.Controls.DateDropDown();
ddd.DateValue = DateTime.Today;
ddd.CalendarLinkText = "<img class=\"icoCalendar\" alt=\"calendar
select\" src=\"img/ico_calendar.gif\">";
ddd.CalendarPosition = 3;
ddd.CalendarStylePath = "@import 'Page/pfcal.css';";
ddd.DisplayFormat = "dMMMMyyyy";
ddd.ShowCalendar = true;
ddd.CssClass = "dateDropDown";
ddd.YearUpperBound = 3;

plh.Controls.Add(ddd);
ddd.PreRender += new EventHandler(ddd_PreRender);

if(mandatory)
{
DateTime minDate = DateTime.Today.AddDays(7);
ddd.DisabledDates = new HYL.Web.Controls.SelectionRange[] { new
HYL.Web.Controls.SelectionRange(DateTime.MinValue, minDate) };
ddd.DateValue = minDate;

HYL.Web.Controls.DateDropDownCompareValidator dcv = new
HYL.Web.Controls.DateDropDownCompareValidator();
dcv.CssClass = "errText";
dcv.Display = ValidatorDisplay.Dynamic;
dcv.Text = "Please enter a date at least 1 week from
today.<br>";
dcv.DateToCompare = minDate;
dcv.Operator = ValidationCompareOperator.GreaterThanEqual;
dcv.ControlToValidate = ddd.ClientID;

plh.Controls.AddAt(0, dcv);
}

#endregion
}
else if(type == OptionGroupType.None)
{
// do nothing
}
}
}

------------------------------------------------------

Anyone got an bright ideas?

Cheers

bne
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,582
Members
45,070
Latest member
BiogenixGummies

Latest Threads

Top