【问题标题】:Bind Gridview on Treeview Node Click在 Treeview 节点上绑定 Gridview 单击
【发布时间】:2016-04-26 04:08:15
【问题描述】:

我想在treenode click上绑定gridview。代码可以正常工作而不会出错,但在UI中没有任何变化,但是当我在按钮单击时使用相同的代码时,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 时被调用,并且所有值都正确设置但从未得到反映。

请帮忙。

【问题讨论】:

    标签: c# asp.net gridview treeview


    【解决方案1】:

    这是您的更新面板。节点事件源自 UpdatePanel,因此只有 Update 面板会在回发后得到更新。请记住,整个页面生命周期都会发生,因此 gridview 确实会获得数据绑定,但只会刷新 UpdatePanel 中的内容。

    您的选择:

    1. Folder_Treeview 添加为回发触发器-或-
    2. 完全摆脱 UpdatePanel -或-
    3. 在 UpdatePanel ContentTemplate 中移动 Gridview

    也是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 时。默认为假。

    • LoginPasswordRecoveryChangePasswordCreateUserWizard 控件的内容尚未转换为可编辑模板。

    • Substitution 控件。

    【讨论】:

    • 非常感谢。这只是因为更新面板而发生的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-06
    相关资源
    最近更新 更多