2016-04-26 5 views
2

グリッドビューをtreenodeにバインドしたいのですが、click.codeはエラーなしでうまく動作しますが、UIでは何も変わりませんが、ボタンクリックで同じコードを使用すると、データが正しくバインドされます。適切に決して反映しますツリービューノードのバインドグリッドクリック

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クリック時に呼び出され、すべての値セット:

マイ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コードです。

助けてください。

答えて

3

更新パネルです。ノードイベントはUpdatePanel内で発生し、ポストバック後に更新パネルのみが更新されます。完全なページライフサイクルが発生するので、gridviewはデータバインドされますが、UpdatePanel内のコンテンツのみがリフレッシュされることに注意してください。

あなたのオプション:

  1. としてFolder_Treeviewを追加ポストバックトリガ - または -
  2. は、UpdatePanelのContentTemplate

内のGridViewのを移動し、完全
  • - または - のUpdatePanelを取り除きます

    また、TreeView is one of several server controls that may not be compatible with an UpdatePanel

    次のASP.NETコントロールは、部分ページ更新と互換性がないので、UpdatePanelコントロールの内部に動作するように設計されていない。いくつかの条件下

    • TreeView制御。 1つは、非同期ポストバックの一部ではないコールバックが有効になっている場合です。別の方法は、CSSスタイルへの参照を使用してコントロールを暗黙的にスタイリングするのではなく、コントロールのプロパティとしてスタイルを直接設定する方法です。もう一つは、EnableClientScriptプロパティがfalse(デフォルトはtrue)の場合です。もう1つは、非同期ポストバック間でEnableClientScriptプロパティの値を変更する場合です。詳細については、「TreeView Webサーバーコントロールの概要」を参照してください。あなたが直接代わりに暗黙的にCSSスタイルへの参照を使用して、コントロールのスタイリングのコントロールのプロパティとしてスタイルを設定

    • Menuコントロール。詳細については、メニューコントロールの概要を参照してください。

    • FileUploadおよびHtmlInputFileは、ファイルを非同期ポストバックの一部としてアップロードするときに使用されます。

    • GridViewおよびDetailsViewは、EnableSortingAndPagingCallbacksプロパティがtrueに設定されているときに制御されます。デフォルトはfalseです。

    • LoginPasswordRecoveryChangePassword、及びその内容は、編集可能なテンプレートに変換されていないCreateUserWizardコントロール。

    • Substitution対照。

  • +0

    ありがとうございました。それは、更新パネルのみのために起こったことです。 – user2148124

    関連する問題