2017-07-25 4 views
0

Ich habe Panel in einem ASP.NET-Steuerelement. Wenn es unsichtbar ist, sind alle GridViews in der Panel Databinding. Ich will sie nicht, wenn die Panel unsichtbar ist. Das folgende solution wurde vorgestellt. Es ist eine gute Lösung für Placeholders und ich habe versucht, es für PanelsPanel ist unsichtbar, aber Kinder sind Databinding

public class NewPanel : Panel 
{ 
    protected override void DataBindChildren() 
    { 
     if (visible) 
     { 
      base.DataBindChildren(); 
     } 
    } 
} 

Meine Frage zu implementieren ist, wie kann ich jetzt die newpanel Klasse im Markup in der ASPX-Seite verwenden? Oder gibt es eine Möglichkeit, die Methode in Panel im Code nur dynamisch zu überschreiben und einfach Panel im Markup zu verwenden?

Dies ist ein Teil des aspx Code

<asp:GridView ID="AssignedGV" runat="server" AutoGenerateColumns="False" DataKeyNames="OrderID" DataSourceID="AssignedDS" Width="100%"> 
     <Columns> 
      <asp:TemplateField HeaderText="Created" SortExpression="DateOrderCreated"> 
        <ItemTemplate> 
         <asp:Label ID="Label1" runat="server" Text='<%# Bind("DateOrderCreated", "{0:d-MMM-yyyy}") %>'></asp:Label> 
        </ItemTemplate> 

<asp:SqlDataSource ID="AssignedDS" runat="server" ConnectionString="<%$ ConnectionStrings:XXXXXXX %>" SelectCommand="SELECT TOP (100) PERCENT T_Orders.OrderID, XXXXXXXXXXXXXXXXX OrderQuoteVersion.RequestApprovalOfEmployeeID, T_Orders.JobNumber FROM XXXXXXX AS T_OrderQuoteVersion RIGHT OUTER JOIN XXXXX AS T_Orders INNER JOIN XXXXXXX ON T_Orders.CustomerID = T_Customers.CustomerID ON T_OrderQuoteVersion.OrderID = T_Orders.OrderID "></asp:SqlDataSource> 

Dieser Code innerhalb des Panel und wird databinded unabhängig davon, ob das Gremium nicht sichtbar ist oder nicht

+0

Wie sind Sie derzeit Datenbindung? Verwenden Sie SQLDataSource-Steuerelemente oder verwenden Sie den C# -Code hinter der Seite? Könnten Sie auch Ihr aktuelles, relevantes ASPX-Markup einbeziehen? –

+0

Ich habe den entsprechenden Code eingefügt. Ja, ich verwende SqlDataSource Controls. –

Antwort

1

ich normalerweise databind im Code hinter und ich werde benutze diesen Ansatz hier, da ich finde, dass er dir mehr Kontrolle gibt. Ich werde interessiert sein, irgendwelche Antworten zu sehen, die die Verwendung der SQLDataSource Kontrolle beibehalten.

Die einzige Änderung, die Sie an Ihrem Aspx vornehmen müssen, ist das Entfernen der SQLDataSource Kontrolle.

In Ihrem Code hinter Ihnen so etwas wie

//Put this in PageLoad or Load, what ever suits you best 
//The IsPostBack check is optional....remove it if that fits tour needs better 
if(!IsPostBack) 
{ 
    //Use the Appropriate Panel ID below 
    if(PanelID.Visible) 
    { 
     string constring = "Your Connection String"; 
     using (SqlConnection con = new SqlConnection(constring)) 
     { 
      using (SqlCommand cmd = new SqlCommand("YOUR SQL QUERY", con)) 
      { 
       cmd.CommandType = CommandType.Text; 
       using (SqlDataAdapter sda = new SqlDataAdapter(cmd)) 
       { 
        using (DataTable dt = new DataTable()) 
        { 
         sda.Fill(dt); 
         AssignedGV.DataSource = dt; 
         AssignedGV.DataBind(); 
        } 
       } 
      } 
     } 
    } 
} 

Hinweis wollen werde Ich habe den Code nicht getestet, kann es haben Tippfehler oder andere dumme Fehler, aber es sollte genug sein, um sich zu bewegen in die richtige Richtung.

+0

Obwohl Ihre Lösung gut ist und funktioniert, werde ich eine SqlDataSource-Lösung verfolgen, weil ich viel Code bearbeite, der bereits geschrieben wurde. Vielen Dank für Ihre Zeit. –

+1

Wenn Sie anderswo eine Lösung finden, stellen Sie sicher, dass Sie sie hier veröffentlichen, damit wir alle von Ihrem Erfolg profitieren können. Es ist nichts falsch daran, deine eigene Antwort zu akzeptieren, solltest du eine finden. –