Как добавить вкладку в Devexpress TabControl по нажатию кнопки? - PullRequest
0 голосов
/ 11 января 2012

У меня есть Devexpress Tabcontrol . Внутри этого Tabcontrol у меня Devexpress Grid . Внутри этой сетки я загружаю кнопку во время выполнения с помощью следующего кода.

GridViewCommandColumn col = new GridViewCommandColumn();
GridViewCommandColumnCustomButton CusButton = new GridViewCommandColumnCustomButton();
CusButton.ID = "btn1";
CusButton.Image.Url = "~/Images/color.jpg";    
col.ButtonType = ButtonType.Image;
col.CustomButtons.Add(CusButton);
gridview.Columns.Add(col);

Теперь при нажатии кнопки мне нужно добавить вкладку в этот Devexpress Tabcontrol, сохраняя эту сетку на первой вкладке.

Но он не добавляется, обновляется после нажатия этой кнопки

Я только что создал объект для закладка и загрузил Gridcontrol.ascx пользовательский элемент управления, который имеет devexpress gridview. После этого я просто вызвал метод addTabPages в моем пользовательском элементе управления Tabpage и передал этот объект Tabpage в качестве параметра. В приведенном ниже коде tabPreview это объект для Tabcontrol usercontrol .

tabpagenew = new TabPage();
Gc = (GridControl)Page.LoadControl(@"GridControl.ascx");
Gc.ID = "GC" + currDDIndex;
ASPxGridView grdPreview = (ASPxGridView)Gc.FindControl("ggc_preview");
grdPreview.ID = "grd" + currDDIndex;
tabpagenew.Controls.Add(Gc);
tabPreview.addTabPages(tabpagenew);

В методе addTabPages я просто добавил вкладки по индексу,

public void addTabPages(TabPage tab_Page)
{
    ActiveIndex = ASPxPageControl1.ActiveTabIndex + 1;
    int index = ASPxPageControl1.TabPages.Count + 1;
    ASPxPageControl1.TabPages.Add(tab_Page);
    tab_Page.ToolTip = tab_Page.Text;
    tab_Page.Name = tab_Page.Name;                
    ImageButton button = new ImageButton();
    button.ImageUrl = "~\\Images\\close.png";
    button.Style.Add(HtmlTextWriterStyle.Cursor, "Hand");
    button.Click += new ImageClickEventHandler(Close_Click);
    button.Attributes.Add("onclick", "TabClose('" + hdnCurrentTab.ClientID + "','" + tab_Page.Index + "');");              
    tab_Page.TabTemplate = new AddTabHeading(button, tab_Page.Text, ASPxPopupMenu1,  ASPxPageControl1.ActiveTabPage.VisibleIndex, ASPxPageControl1);                
}

1 Ответ

1 голос
/ 29 октября 2013

На странице aspx:

  1. Вам нужно поместить элемент управления вкладкой между asp: UpdatePanel.
  2. Добавить кнопку внутри скрытого DIV.
  3. Всякий раз, когда вынеобходимо добавить новую вкладку, вызвать функцию нажатия кнопки.

Это код:

<asp:UpdatePanel runat="server" ID="ClientDetailsUpdatePanel" >
    <ContentTemplate>
        <div style="display:none">
            <asp:Button ID="CallBackHiddenButton" runat="server" OnClick="CallBackHiddenButton_Click" Text="Button"/>
        </div>

        <dx:ASPxPageControl ID="DetailsClientTabs" ClientInstanceName="DetailsClientTabs" runat="server" ActiveTabIndex="0"
            ActiveTabStyle-Border-BorderStyle="None" EnableCallBacks="false" 
            ActiveTabStyle-BackColor="Transparent" ContentStyle-BackColor="Transparent"
            ContentStyle-BorderRight-BorderStyle="None" ContentStyle-BorderLeft-BorderStyle="None"
            ContentStyle-BorderTop-BorderStyle="None" ContentStyle-BorderBottom-BorderStyle="None"
            EnableTheming="False" ContentStyle-Border-BorderColor="Transparent">

        </dx:ASPxPageControl>
    </ContentTemplate>
</asp:UpdatePanel>

Теперь в вашем коде C #:

1-Нажмите на кнопку, чтобы добавить новую страницу:

protected void CallBackHiddenButton_Click(object sender, EventArgs e)
    {
        TabPage newPage = new TabPage("test" + DateTime.Now.Second, "maged" + DateTime.Now.Second);
        DetailsClientTabs.TabPages.Add(newPage);

        //You always need to reassign the previous tabs pages
        for (int i = 0; i < DetailsClientTabs.TabPages.Count; i++)
        {
            Control cc = Page.LoadControl("~/Forms/Client/Details/TabsPages/TestUserCtrl.ascx");
            cc.ID = String.Format("control_di_", DateTime.Now);
            DetailsClientTabs.TabPages[i].Controls.Add(cc);
        }

        //If you need to get the new added tab to be the active one!
    DetailsClientTabs.ActiveTabIndex = DetailsClientTabs.TabPages.Count - 1;
        }

Это может помочь вам.

...