2016-04-26 14 views
2

Ich möchte Gitternetzansicht auf Treenode binden click.code funktioniert gut ohne Fehler, aber in UI ändert sich nichts, aber wenn ich den gleichen Code auf Knopf klicken, bindet Gridview Daten ordnungsgemäß.Bind Gridview auf Treeview Knoten Klicken Sie

Mein APSX Code ist

<asp:ScriptManager ID="ScriptManager1" runat="server"> 
        </asp:ScriptManager> 
        <div style="overflow: scroll; height: 450px;"> 
         <asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Always"> 
          <ContentTemplate> 
           <asp:TreeView ID="Folder_Treeview" runat="server" ShowLines="true" LeafNodeStyle-CssClass="childnode" 
            Style="" ForeColor="Blue" SelectedNodeStyle-ForeColor="Green" OnSelectedNodeChanged="Folder_Treeview_SelectedItemChanged"> 
           </asp:TreeView> 
          </ContentTemplate> 
         </asp:UpdatePanel> 
        </div> 
<asp:GridView ID="GridView1" CssClass="grid" GridLines="None" ShowFooter="true" AllowPaging="true" 
         PageSize="5" AutoGenerateColumns="false" OnPageIndexChanging="GridView1_PageIndexChanging" 
         runat="server"> 
         <Columns> 
          <asp:TemplateField HeaderText="Name"> 
           <ItemTemplate> 
            <asp:Label ID="lblName" runat="server" Text='<%#Eval("Name")%>'></asp:Label> 
           </ItemTemplate> 
          </asp:TemplateField> 
          <asp:TemplateField HeaderText="File Length"> 
           <ItemTemplate> 
            <asp:Label ID="lblLen" runat="server" Text='<%#Eval("Length")%>'></asp:Label> 
           </ItemTemplate> 
          </asp:TemplateField> 
          <asp:TemplateField HeaderText="File Extention"> 
           <ItemTemplate> 
            <asp:Label ID="lblFileType" runat="server" Text='<%#Eval("Extension")%>'> 
            </asp:Label></ItemTemplate> 
          </asp:TemplateField> 
          <asp:TemplateField HeaderText="Creation Date & Time"> 
           <ItemTemplate> 
            <asp:Label ID="lblDateTime" runat="server" Text='<%#Eval("CreationTime")%>'> 
            </asp:Label></ItemTemplate> 
          </asp:TemplateField> 
         </Columns> 
        </asp:GridView> 

        <p> 
         <asp:Label Text="" ID="lblMsg" runat="server"></asp:Label></p> 

CS Code:

protected void Folder_Treeview_SelectedItemChanged(object sender, EventArgs e) 
    { 
     TreeNode node = this.Folder_Treeview.SelectedNode; 
     SetFolderPath(node); 
    } 

    public void SetFolderPath(TreeNode node) 
    {   
     Session["ParentFolderId"] = node; 
     // System.IO.DirectoryInfo RootDir = new System.IO.DirectoryInfo(Server.MapPath("~/")); 
     string CurrNode = node.Text; 
     string separator = "\\"; 
     Folder_Treeview.PathSeparator = Convert.ToChar(separator); 

     while (node.Parent != null) 
     { 
      CurrNode = node.Parent.Text + this.Folder_Treeview.PathSeparator + CurrNode; 
      node = node.Parent; 
     } 
     ViewState["Folder"] = CurrNode; 
     ViewState["FileType"] = "All"; 
     GetFilesFromFolder(); 
    } 

private void GetFilesFromFolder() 
    { 
     // GET A LIST OF FILES FROM A SPECIFILED FOLDER. 
     DirectoryInfo objDir = new DirectoryInfo(Server.MapPath((string)ViewState["Folder"])); 

     FileInfo[] listfiles = objDir.GetFiles("*." + ((string)ViewState["FileType"] != "All" ? 
      ViewState["FileType"] : "*")); 

     if (listfiles.Length > 0) 
     { 
      // BIND THE LIST OF FILES (IF ANY) WITH GRIDVIEW. 
      GridView1.Visible = true; 
      GridView1.DataSource = listfiles; 
      GridView1.DataBind(); 

      lblMsg.Text = listfiles.Length + " files found"; 
     } 
     else 
     { 
      GridView1.Visible = false; 
      lblMsg.Text = "No files found"; 
     } 
    } 

OnSelectedNodeChanged Methode auf node Klick aufgerufen werden, und alle Wert legt richtig, aber nie reflektieren lassen.

Bitte helfen.

Antwort

3

Es ist Ihr Update-Panel. Das Knotenereignis stammt aus dem UpdatePanel, sodass nur das Aktualisierungsfenster nach dem Postback aktualisiert wird. Beachten Sie, dass der gesamte Seitenlebenszyklus auftritt, sodass die Gridview datengebunden wird, aber nur der Inhalt im UpdatePanel aktualisiert wird.

Ihre Optionen:

  1. hinzufügen Folder_Treeview als ein Postback-Trigger -oder
  2. Get Bewegen Sie den Gridview innerhalb des Updatecontent
-oder
  • insgesamt des Update befreien

    Auch ein TreeView is one of several server controls that may not be compatible with an UpdatePanel:

    Der folgende ASP.NET-Steuerelemente sind nicht kompatibel mit Teilaktualisierungen von Seiten, und sind so konzipiert, also nicht in einem Update Kontrolle zu arbeiten:

    • TreeView Kontrolle unter verschiedenen Bedingungen. Eine ist, wenn Callbacks aktiviert sind, die nicht Teil eines asynchronen Postbacks sind. Eine andere Möglichkeit besteht darin, Stile direkt als Steuerelementeigenschaften festzulegen, anstatt das Steuerelement implizit zu formatieren, indem ein Verweis auf CSS-Stile verwendet wird. Ein anderes ist, wenn die EnableClientScript-Eigenschaft falsch ist (der Standardwert ist wahr). Ein anderes ist, wenn Sie den Wert der EnableClientScript-Eigenschaft zwischen asynchronen Postbacks ändern. Weitere Informationen finden Sie unter Übersicht über das TreeView-Webserversteuerelement.

    • Menu Steuerelement, wenn Sie Formatvorlagen direkt als Steuerelementeigenschaften festlegen, anstatt das Steuerelement implizit mit einem Verweis auf CSS-Formatvorlagen zu formatieren. Weitere Informationen finden Sie unter Überblick über die Menüsteuerung.

    • FileUpload und HtmlInputFile Steuerelemente, wenn sie zum Hochladen von Dateien als Teil eines asynchronen Postbacks verwendet werden.

    • GridView und DetailsView steuert, wenn ihre EnableSortingAndPagingCallbacks-Eigenschaft auf True festgelegt ist. Der Standardwert ist falsch.

    • Login, PasswordRecovery, ChangePassword und CreateUserWizard Kontrollen, dessen Inhalt in editierbare Vorlagen nicht umgesetzt worden.

    • Die Substitution Kontrolle.

  • +0

    Vielen Dank. Es ist nur wegen Update-Panel passiert. – user2148124

    Verwandte Themen