0

いくつかの異なる種類のテンプレートを使用する ASPxGridView があり、それらの各テンプレートに ASPxButton があるとします。ASPxGridView にないボタンもいくつかあります。ページ コントロール コレクション内のすべてのコントロールを再帰的にループし、見つかった ASPxButton のボタン テキスト (またはその他のプロパティ) を変更すると、ページ上のすべての ASPxButton が、ASPxGridView のものを除いて変更されます。

ASPxGridView の ASPxButtons が変更されないのはなぜですか? ASPxGridView テンプレートのボタンは ASPxGridViews コントロール コレクションにありませんか?

ボタンを見つけるには ASPxGridViews を特別なケースにする必要があるようです.... ID がわからないため、FindTemplateControl メソッドを使用できません。これどうやってするの?

前もって感謝します!

2013年3月7日編集:

これは私が行っていることの例です (これはマスター ページの Load イベントで呼び出され、ASPxGridView テンプレートのボタンを除くすべてのボタンで機能します...おそらく他のテンプレート):

    /// <summary>
    /// http://stackoverflow.com/questions/2632302/loop-through-all-the-user-controls-on-a-page
    /// </summary>
    /// <param name="controls">Page.Controls or some other control collection.</param>
 private void setUseSubmitBehavior(ControlCollection controls)
    {
        foreach (Control ctrl in controls)
        {
            if (ctrl is ASPxButton)
            {
                if ((ctrl as ASPxButton).ID != GlobalProperties.SubmitButtonID)
                    (ctrl as ASPxButton).UseSubmitBehavior = false;
            }
            else if (ctrl is Button)
            {
                if ((ctrl as Button).ID != GlobalProperties.SubmitButtonID)
                    (ctrl as Button).UseSubmitBehavior = false;
            }

            try
            {
                if (ctrl.Controls.Count > 0)
                    setUseSubmitBehavior(ctrl.Controls);
            }
            catch (Exception ex)
            {
                //Don't let the page fail here... just add a log and let it fail on the page that caused the error.
                MiscUtility.ExceptionLog(Page.GetType().AssemblyQualifiedName + " - " + MethodInfo.GetCurrentMethod().Name, ex.Message, "");
            }
        }
    }

そして、これは GridViews テンプレート化されたボタンでこれを呼び出す最初の試みの例です...しかし、うまくいきませんでした:

 private void setUseSubmitBehavior(ControlCollection controls)
    {
        foreach (Control ctrl in controls)
        {
            if (ctrl is ASPxButton)
            {
                if ((ctrl as ASPxButton).ID != GlobalProperties.SubmitButtonID)
                    (ctrl as ASPxButton).UseSubmitBehavior = false;
            }
            else if (ctrl is Button)
            {
                if ((ctrl as Button).ID != GlobalProperties.SubmitButtonID)
                    (ctrl as Button).UseSubmitBehavior = false;
            }                
            else if (ctrl is DevExpress.Web.ASPxGridView.ASPxGridView)
            {
                setUseSubmitBehaviorOnASPxGridView((ctrl as ASPxGridView));
                continue;//This one is handled differently.
            }

            try
            {
                if (ctrl.Controls.Count > 0)
                    setUseSubmitBehavior(ctrl.Controls);
            }
            catch (Exception ex)
            {
                //Don't let the page fail here... just add a log and let it fail on the page that caused the error.
                MiscUtility.ExceptionLog(Page.GetType().AssemblyQualifiedName + " - " + MethodInfo.GetCurrentMethod().Name, ex.Message, "");
            }
        }
    }

    private void setUseSubmitBehaviorOnASPxGridView(ASPxGridView theGridView)
    {
        try
        {
            List<GridViewBaseTemplateContainer> listTemplateContainers = new List<GridViewBaseTemplateContainer>();

            if (theGridView.Templates.DataItem != null)
                listTemplateContainers.Add((theGridView.Templates.DataItem as GridViewDataItemTemplateContainer));
            if (theGridView.Templates.DataRow != null)
                listTemplateContainers.Add((theGridView.Templates.DataRow as GridViewDataRowTemplateContainer));
            if (theGridView.Templates.DetailRow != null)
                listTemplateContainers.Add((theGridView.Templates.DetailRow as GridViewDetailRowTemplateContainer));
            if (theGridView.Templates.EditForm != null)
                listTemplateContainers.Add((theGridView.Templates.EditForm as GridViewEditFormTemplateContainer));
            if (theGridView.Templates.EmptyDataRow != null)
                listTemplateContainers.Add((theGridView.Templates.EmptyDataRow as GridViewEmptyDataRowTemplateContainer));
            if (theGridView.Templates.FooterCell != null)
                listTemplateContainers.Add((theGridView.Templates.FooterCell as GridViewFooterCellTemplateContainer));
            if (theGridView.Templates.FooterRow != null)
                listTemplateContainers.Add((theGridView.Templates.FooterRow as GridViewFooterRowTemplateContainer));
            if (theGridView.Templates.GroupRow != null)
                listTemplateContainers.Add((theGridView.Templates.GroupRow as GridViewGroupRowTemplateContainer));
            if (theGridView.Templates.GroupRowContent != null)
                listTemplateContainers.Add((theGridView.Templates.GroupRowContent as GridViewBaseTemplateContainer));
            if (theGridView.Templates.Header != null)
                listTemplateContainers.Add((theGridView.Templates.Header as GridViewHeaderTemplateContainer));
            if (theGridView.Templates.HeaderCaption != null)
                listTemplateContainers.Add((theGridView.Templates.HeaderCaption as GridViewBaseTemplateContainer));
            if (theGridView.Templates.PagerBar != null)
                listTemplateContainers.Add((theGridView.Templates.PagerBar as GridViewPagerBarTemplateContainer));
            if (theGridView.Templates.PreviewRow != null)
                listTemplateContainers.Add((theGridView.Templates.PreviewRow as GridViewPreviewRowTemplateContainer));
            if (theGridView.Templates.StatusBar != null)
                listTemplateContainers.Add((theGridView.Templates.StatusBar as GridViewStatusBarTemplateContainer));
            if (theGridView.Templates.TitlePanel != null)
                listTemplateContainers.Add((theGridView.Templates.TitlePanel as GridViewBaseTemplateContainer));

            foreach (GridViewBaseTemplateContainer container in listTemplateContainers)
            {
                //The problem with this and other attempts is that container is always null even if listTemplateContainers is populated.
                if (container != null)
                {
                    ControlCollection cc = container.Controls;
                    if (cc != null && cc.Count > 0)
                        setUseSubmitBehavior(cc);
                }
            }
        }
        catch (Exception ex)
        {
            //Don't let the page fail here... just add a log and let it fail on the page that caused the error.
            MiscUtility.ExceptionLog(Page.GetType().AssemblyQualifiedName + " - " + MethodInfo.GetCurrentMethod().Name, ex.Message, "");
        }
    }

ちなみに、最初のメソッドに ASPxGridView テンプレートのボタンがない理由は、マスター ページの読み込みイベントの後に InstantiateIn 関数が呼び出されるためだと思います。マスター ページの preRender イベントも試しましたが、その後も InstantiateIn が呼び出されます。

4

0 に答える 0