pühapäev, 22. veebruar 2009

Kuidas leida ülesse kõik ühte tüüpi elemendid aspx veebilehe pealt

No on vaja ülesse leida kõik usercontrolid või mida iganes aspx veebilehe pealt
Siin üks näide, kuida ülesse leida kõik teatud interface kasutavad usercontrolid antud näites


/// <summary>
/// leiame kõik antud lehel olevad ICVPublishView interfacega olevad asjad ülesse
/// </summary>
/// <returns></returns>
private List<ETISUserControls.Views.ICVPublishView> FindICVPublishViewUserControls()
{
List<ETISUserControls.Views.ICVPublishView> ICVkontrollid = new List<ETISUserControls.Views.ICVPublishView>();
ICVPublishViewUserControl(this.Page.Form, ICVkontrollid); //siin kindlasti tähele panna, et controlid on lehe Form objekti omad
return ICVkontrollid; // siin nimekirjas on nad nüüd kõik olemas
}

Kasutame rekursiivset pöördumist, iga controli seest otsime omakorda edasi

private void ICVPublishViewUserControl(Control kont, List<ETISUserControls.Views.ICVPublishView> ICVkontroll)
{
try
{
if (kont != null) //igaks juhuks, kunagi ei või teada mis aspx veebilehe eventis asja kasutatakse, this.Page.Form võib ka veel null olla
{
foreach (Control ker in kont.Controls)
{
// siin kontollime,kas asi on "õige asi" kasutame C# "as" operandi, kas annab antud tüübiks pöörata
ETISUserControls.Views.ICVPublishView hte = ker as ETISUserControls.Views.ICVPublishView;
if (hte != null) // kui oli õige asi siis lisame nimekirja
{
ICVkontroll.Add(hte); //"as" teeb kohe ka selle õige objekti valmis, lihtsalt kontrolliks piisab ka "is" operandist
}
else //leitud ICVPublishView seest enam ei otsi
{
ICVPublishViewUserControl(ker, ICVkontroll);
}
}
}
}
catch (SystemException ex)
{
this.CustomValidator1.ErrorMessage = ex.Message;
this.CustomValidator1.IsValid = false;
}
}



Kuidas asja kasutada

//paneme asjad nimekirja
List<ETISUserControls.Views.ICVPublishView> kontro = this.FindICVPublishViewUserControls();
//nüüd on meil list leitud objektidega olemas
foreach (ETISUserControls.Views.ICVPublishView ker in kontro)
{
ker.CfPers_CV_row = this.CfPers_CV_row; //rakendame asja
}

Blogged with the Flock Browser