2016-04-26 103 views
2

我想绑定treenode上的gridview click.code工作正常,但没有错误,但在UI中没有任何更改,但是当我在按钮单击时使用相同的代码时,Gridview会正确绑定数据。在Treeview节点上绑定Gridview点击

我apsx代码

<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代码:

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方法被调用的node点击,所有值设置正确,但从来没有得到体现。

请帮忙。

回答

3

这是您的更新面板。节点事件源自UpdatePanel,所以只有更新面板在回发后才会更新。请记住,完整的Page生命周期发生,所以gridview会获取数据绑定,但只有UpdatePanel内的内容才会刷新。

您的选择:

  1. 添加Folder_Treeview作为回传触发 - 或 -
  2. 摆脱的UpdatePanel的共 - 或 -
  3. 移动GridView中的UpdatePanel的ContentTemplate

另外一个TreeView is one of several server controls that may not be compatible with an UpdatePanel

以下ASP.NET控件不与部分页面更新兼容,因此没有设计成一个UpdatePanel控件内工作:几种情况下,

  • TreeView控制。一种是当回调被启用而不是异步回传的一部分时。另一种方法是直接将样式设置为控件属性,而不是通过使用对CSS样式的引用来隐式设置控件的样式。另一种情况是EnableClientScript属性为false(默认为true)。另一个是如果您更改异步回发之间的EnableClientScript属性的值。有关更多信息,请参阅TreeView Web服务器控件概述。

  • Menu控制当您将样式直接设置为控件属性,而不是通过使用对CSS样式的引用隐式地设置控件的样式。有关更多信息,请参阅菜单控制概述。

  • FileUploadHtmlInputFile控件何时用于上传文件作为异步回发的一部分。

  • GridViewDetailsView控制何时其EnableSortingAndPagingCallbacks属性设置为true。默认值是false。

  • Login,PasswordRecovery,ChangePasswordCreateUserWizard其内容未被转换为可编辑模板的控件。

  • 控制Substitution

+0

非常感谢。这仅仅是因为更新面板而发生的。 – user2148124