ContainerGridDataBinding в Infragistics WebHierarchicalDataGrid

Опитвам се да постигна страниране с персонализирано обвързване на данни в контрола Infragistics WebHierarchicalDataGrid. Желаното поведение, когато потребителят щракне върху връзка към страница в WHDG пейджър, е да извлече една страница с данни от бекенда (вече имам SQL Server SP, който прави това) и да я обвърже с WHDG, за да показва 1 страница наведнъж.

Вярвам, че използването на събитието "ContainerGridDataBinding" е начинът да го направите, но не мога да настроя работещ код. Всяка помощ или примери за код за това как да го направите се оценяват много.

Също така би било чудесно, ако същото поведение се запази при дъщерните групи на WHDG


person Yuriy Galanter    schedule 16.08.2012    source източник


Отговори (2)


След като получите своите SQL заявки/изберете команди, ще получите една страница, която ще искате да създадете персонализиран пейджър, за да направите това. След това в събитията, свързани с бутоните/падащото меню или друг контрол, който имате в пейджъра, бихте извикали вашите SQL команди. Моля, вижте следното за това как да внедрите персонализирания пейджър за WebDataGrid:

http://help.infragistics.com/NetAdvantage/ASPNET/2012.1/CLR4.0/?page=WebDataGrid_Using_Custom_Paging_Template.html

Персонализиран пейджър чрез код: http://help.infragistics.com/NetAdvantage/ASPNET/2012.1/CLR4.0/?page=WebDataGrid_Using_Custom_Paging_Template_in_Code.html

Правенето на това за WebHierarchicalDataGrid ще бъде същото за родителската група. За децата ще искате да го направите за поведението на тази група, вместо на родителската група.

Сега, ако не искате да използвате бутони и/или падащи менюта във вашия пейджър и вместо това искате връзки (1,2,3,4 и т.н.), това може да стане, като направите следното в кода:

    private class CustomItemTemplate : ITemplate
    {
        #region ITemplate Members

        public void InstantiateIn(Control container)
        {
            for (int i = 0; i < 3; i++)
            {
                LiteralControl link = new LiteralControl();
                //class for current page: igg_PageCurrent
                //class for other pages: igg_PageLink
                link.Text = "<span class='igg_PageLink' idx='" + i.ToString() + "'>" + (i+1).ToString() + "</span>";

                container.Controls.Add(link);
            }
        }

        #endregion
    }

    protected void Page_PreInit(object sender, EventArgs e)
    {
        whdg1.Behaviors.Paging.PagerTemplate = new CustomItemTemplate();
    }

Истинският проблем обаче е, когато получавате данни по този начин от базата данни, когато получавате достатъчно данни само за една страница, така че мрежата няма представа колко страници има в базата данни. Така че или ще трябва да знаете как да намерите това, или просто да го знаете. Това също ще затрудни прилагането на дъщерната лента, тъй като ще трябва да знаете за всеки ред, който може да се разшири, колко дъщерни записи или страници със записи има.

person MPeterson    schedule 18.09.2012
comment
Всъщност се оказа много по-лесно, отколкото си мислех. При всяко събитие PageIndexChanged (дори причинено от персонализиран пейджър, който може да бъде персонализиран UserControl) свързвам WHDG с фалшив празен набор от данни, причинявайки задействане на ContainerGridDataBinding, при което данните само за текущата страница се извличат от DB - person Yuriy Galanter; 18.09.2012

Оказа се много по-лесно отколкото си мислех. При всяко събитие PageIndexChanged (дори причинено от персонализиран пейджър, който може да бъде персонализиран UserControl) свързвам WHDG с фалшив празен набор от данни, причинявайки задействане на ContainerGridDataBinding, при което данните само за текущата страница се извличат от DB

person Yuriy Galanter    schedule 18.09.2012