2009-03-24 11 views
0

Derzeit habe ich eine dynamisch erstellte Gridview auf meiner Seite. Wenn ein Benutzer etwas in ein Textfeld eingibt und eine Schaltfläche drückt, wird die gesamte Seite aktualisiert, um die Rasteransicht aufzufüllen und sichtbar zu machen. Ich will das nicht mehr. Wie würde ich das UpdatePanel verwenden, um die GridView sichtbar zu machen und sie zu füllen?asp.net gridview im Update-Panel, sichtbar machen und aktualisieren Inhalt

<div class="span-93 prepend-2 top"> 
     <strong>Enter Number</strong><br /> 
     <asp:TextBox ID="PartNumber" runat="server" Width="100"></asp:TextBox> 
     <asp:Button ID="CreateButton" runat="server" Width="85" Text="Locate" OnClick="CreateButton_Click" /> 
    </div> 
<asp:Label ID="Select" runat="server" Font-Bold="true" Text="Select choice" Visible="false"></asp:Label><br /> 
      <ajax:UpdatePanel ID="UpdatePanel" runat="server" UpdateMode="Conditional"> 
       <ContentTemplate> 
        <asp:GridView ID="GridView" Visible="false" runat="server" HeaderStyle-Width="200" HeaderStyle-BackColor="#2B6292" HeaderStyle-ForeColor="White" 
        AllowSorting="true" AllowPaging="true" Width="600" AutoGenerateColumns="False" OnRowCreated="GridView_OnRowCreated" 
        DataKeyNames="Id" onsorting="GridView_OnSort"> 
         <Columns> 
          ... 
         </Columns> 
        </asp:GridView> 
       </ContentTemplate> 
       <Triggers> 
        <ajax:AsyncPostBackTrigger ControlID="CreateButton"/> 
       </Triggers> 
      </ajax:UpdatePanel> 

Theres eine andere Taste auf der Seite mit dem Namen Create, offensichtlich, dass die gridview bevölkern werden und machen es sichtbar, so ein Benutzer daraus auswählen können. Ist das möglich? Danke im Voraus.

Edit: Binding-Code zu gridview:

protected void Create_Click(object sender, EventArgs e) 
     { 
      if (!String.IsNullOrEmpty(Number.Text)) 
      { 
       BLL newbll = new BLL(); 
       Database.DataTable tempTable = newbll.GetItemByPartNumber(Number.Text); 

       if (Table.Count != 0) 
       { 
       DataTable table = tempTable ; 

       string[] VID = { "Id" }; 
       GridviewDiv.Visible = true; 
       GridView.DataSource = table; 
       GridView.DataKeyNames = VID; 
       GridView.DataBind(); 
      } 
     } 
    } 
+0

Es ist nicht klar zu mir macht, ob Sie eine oder zwei haben Schaltflächen, die als Auslöser für die Anzeige des GridViews dienen - können Sie das klären? –

+0

Es ist nur ein Knopf. –

Antwort

0

Da Ihr Update-Panel des Update-Modus zu Conditional festgelegt ist, in Ihrem Code hinter nach dem Aufruf von DataBind auf der Grid-Ansicht, müssen Sie Update aufrufen () auf den Namen Ihres Update Panels (in diesem Fall UpdatePanel genannt).

+0

Ich habe Fehler auf der Seite mit den Worten: Sys.InvalidOperationException: Kann UpdatPanel mit ID ctl00_Main_GridviewUpPanel nicht finden. Wenn es dynamisch aktualisiert wird, muss es sich in einem anderen UpdatePanel befinden. –

+0

Zuerst ist "UpdatPanel" der Name Ihres Update-Panels, oder ist es falsch geschrieben? In Ihrem Beispiel heißt es "UpdatePanel". Ist Ihr Update-Panel in einem anderen verschachtelt? Sie müssen die untergeordneten Steuerelemente innerhalb des externen Update-Steuerfelds durchlaufen, um das Update-Steuerfeld zu finden, das Sie aktualisieren müssen. –

+0

Lance - Der Name ist UpdatePanel, es wurde nur falsch geschrieben, und nein, es ist nicht in einem anderen Update-Panel. –

0

Nachdem die Create als Auslöser erklärt sollten Sie aktualisieren nicht explizit aufrufen müssen()

die Refresh zu tun

Wo Sie die Create erklärt haben? - Es muss sich im selben 'NamingContainer' befinden wie das UpdatePanel, damit es gefunden wird

Sie können die Deklaration des CreateButton in Ihrem Update-Panel verschieben. Wenn dies der Fall brauchen Sie nicht explizit einen Trigger zu erklären - nachsehen, ob das einen Unterschied

+0

Tom, ich kann nicht, weil der fragliche Knopf neben dem ursprünglichen Textfeld sein muss. Wenn darauf geklickt wird, wird eine darunter liegende Gitteransicht sichtbar und mit dem Code-Behind gefüllt. –

+0

OK ... Aber (ohne einen expliziten Aufruf von Update()) verursacht das Klicken auf die Schaltfläche cause: Die Gridview wird angezeigt, eine vollständige Aktualisierung wird durchgeführt, gar nichts oder wird eine Fehlermeldung angezeigt (oder Kompilierungsfehler) ? –

+0

Wenn ich auf die Schaltfläche klicke, um die Gridview anzuzeigen, geschieht nichts und ich erhalte einen Fehler auf der Seite, die ich in den ersten Kommentaren von RSolberg angegeben habe –

0

Verwenden Sie den folgenden

<asp:UpdatePanel ID="..." runat="server" UpdateMode="Conditional" ChildrenAsTriggers="true">  
    <ContentTemplate> 
     <asp:GridView ....> 
     </asp:GridView .....> 

    ///buttons ..............whatever 

    </ContentTemplate> 

Verwandte Themen