DataBind() blive kaldt før set_DataSource ?
I forbindelse med at jeg satte mig for at udvide DropDownListen lidt så jeg selv kunne overtage DataBind-metoden er jeg stødt ind i en, for mig, lidt besynderlig opdagelse.Jeg har overridet DataBind-metoden, så den tager DataSource-objectet (som i mit tilfælde er en collection), og tilføjer et ListItem for hver item i datasourcen. Jeg blev dog ved med at få en null-reference exception, hvilket jeg ikke kunne forstå... jeg havde da sat min datasource før jeg kaldte DataBind().
Efter lidt debugging gik det op for mig, at min DataBind blev kaldt FØR min datasource blev sat, hvilket for mig virker meget ulogisk? Indtil videre har jeg fået løst problemet med at flytte min kode fra DataBind() op i set_DataSource.
Mit spørgsmål er så, om dette er helt normalt, eller om det er mig der har gjort noget galt et sted?
Min klasse ser sådan her ud:
using System;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
namespace Dobedogz.com.WebControls
{
/// <summary>
/// Summary description for ColorPicker.
/// </summary>
public class ColorPicker : System.Web.UI.WebControls.DropDownList
{
private Product dataSource;
public ColorPicker() : base()
{
}
public override object DataSource
{
get
{
return this.dataSource;
}
set
{
if (value is Product)
{
this.dataSource = (Product)value;
foreach (Color c in this.dataSource.Colors)
{
this.Items.Add(new ListItem(c.Name, c.BaseColor.Hex));
}
}
else
{
throw new ArgumentException("Datasource has to be a product");
}
}
}
protected override void Render(System.Web.UI.HtmlTextWriter writer)
{
this.Attributes.Add("onChange", "chooseColor('"+ this.ClientID +"', this.options[this.selectedIndex].value)");
base.Render (writer);
HtmlInputText color = new HtmlInputText();
color.ID = this.ClientID +":colorViewer";
color.Disabled = true;
color.Style.Add("background-color", "#CCCCCC");
color.Style.Add("width", "30px");
color.Style.Add("height", "18px");
color.Style.Add("border", "1px solid white");
color.RenderControl(writer);
}
}
}
