我已经嵌套了ajax手风琴网页控件(嵌套3深或有时4深)我试图找到一个嵌套的手风琴的父手风琴。当最深的手风琴中的任何一个成为数据包时,我想这样做。
protected void grandChildAccordion_ItemDataBound(object sender, AjaxControlToolkit.AccordionItemEventArgs e)
{
if (e.AccordionItem.ItemType == AjaxControlToolkit.AccordionItemType.Header)
{
// find parent accordion
}
}
有时父母手风琴将在e.AccordionItem.Parent.Parent.Parent等级或e.AccordionItem.Parent.Parent.Parent.Parent等级。
那么,如何检查e.AccordionItem.Parent
是否等于AjaxControlToolkit.AccordionContentPanel
“类型”?
(不那么优雅)解决方案:我有嵌套手风琴,最深的手风琴级别包含文档列表,每个手风琴标题都有一个标签显示嵌套在其中的文档数。从最深层次的手风琴水平开始,我得到一些文件,我遍历嵌套手风琴并找到每个手风琴标题,允许我找到他们的doc计数标签并为其添加一个值..希望这有助于某人:< / p>
// Save doc count. It will be displayed in doc count label within current accordion header, and the value will then be added to the doc count of each parent accordion's header.
int curDocCount = qcDocsBO.FetchQCDocumentCountByProjectID(SessionHandler.ProjectID, qcDocsBO.LSDItemID);
lblDocCount.Text = curDocCount.ToString();
// A deep-most accordion has just been DataBound. Start traversing upwards through nested accordions, adding the doc count to each parent accordion header's doc count label.
AjaxControlToolkit.Accordion curAccordion = sender as AjaxControlToolkit.Accordion;
AjaxControlToolkit.AccordionPane parentAccCP = curAccordion.Parent.Parent.Parent as AjaxControlToolkit.AccordionPane;
if (parentAccCP == null)
parentAccCP = curAccordion.Parent.Parent.Parent.Parent as AjaxControlToolkit.AccordionPane;
while (parentAccCP != null)
{
Label parentDocCountLabel = (Label)parentAccCP.FindControl("lblDocCount");
if (parentDocCountLabel.Text == "")
parentDocCountLabel.Text = "0";
parentDocCountLabel.Text = (Convert.ToInt32(parentDocCountLabel.Text) + curDocCount).ToString();
AjaxControlToolkit.AccordionPane nextParentAccCP = parentAccCP.Parent.Parent.Parent as AjaxControlToolkit.AccordionPane;
if (nextParentAccCP == null)
nextParentAccCP = parentAccCP.Parent.Parent.Parent.Parent as AjaxControlToolkit.AccordionPane;
if (nextParentAccCP == null)
nextParentAccCP = parentAccCP.Parent.Parent.Parent.Parent.Parent as AjaxControlToolkit.AccordionPane;
if (nextParentAccCP == null)
nextParentAccCP = parentAccCP.Parent.Parent.Parent.Parent.Parent.Parent as AjaxControlToolkit.AccordionPane;
if (nextParentAccCP != null)
parentAccCP = nextParentAccCP;
else
parentAccCP = null;
}
答案 0 :(得分:0)
您始终可以使用is
关键字进行类型检查,也可以使用as
关键字进行安全投放。
请考虑以下事项:
if(e.AccordionItem.Parent is AjaxControlToolkit.AccordionContentPanel) {
...
}
或者
var accordion = e.AccordionItem.Parent as AjaxControlToolkit.AccordionContentPanel;
if(accordion != null) {
...
}
如果安全演员表没有成功, accordion
为空。
使用其中一种或两种技术,您可以在层次结构中向上迭代,并在遇到您要查找的类型时停止。