none
Gridview aufgrund von Spaltenwert eines anderen Gridviews erstellen RRS feed

  • Frage

  • Hallo,

    ich habe eine Textbox mit der ich die Parameter fürs Gridview eingebe. (Access Source)
    Dann wird mir in den meisten Fällen eine manchmal aber auch mehrere Zeilen ausgeben.
    Diese haben 10 Spalten.

    Nun habe ich ein anderes Gridview (SQL Source) das auf die Daten der 2. Spalte vom 1. Gridview abfragen soll.

    Ich habe mir schon gedacht das ich den Spaltenwert temporär in ein Label schreibe und im 2. Gridview dann sage WHERE (Nr = ?) und <asp:FormParameter FormField="labelTemp" Name="Nr" Type="String" />.
    Ka ob das geht. Habe bisher auch noch nichts gefunden wie ich einen Spaltenwert einem Label zuordnen kann :/.

    Danke und Gruß
    sim_n
    Mittwoch, 10. März 2010 07:37

Antworten

  • Hi,
    Über die Verschachtelung könnte ich in jeder Gridview Zeile ein Detailsview integrieren.
    Ich möchte das Detailsview aber seperat, unter dem Gridview erzeugen.
    Dann mach das doch!? Du bist ja nicht gezwungen, das neue Control innerhalb der Zeile zu erstellen.

    <asp:GridView ...>
        ...
    </asp:GridView>
    
    <br />
    
    <asp:PlaceHolder ID="DetailViewsContainer" runat="server" />
    

    In dem Fall kannst Du dann das den Code so aufbauen, dass dein DetailsView Control in den Placeholder kommt.

    Dim MyNewControl As DetailsView
        ...
    
        DetailsViewContainer.Controls.Add( MyNewControl )
    

    Das Hauptproblem ist aber das ich es nicht schaff dass, das Detailview die Nr verwendet die im Gridview erzeugt wurde und dann diese auf SQL DB abprüft.
    Welche Nummer wurde denn im GridView erzeugt ? Die Werte kommen doch aus der Datenbank und stehen bspw. im RowDataBound Event e.Row.DataItem( ... ) zur Verfügung.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Mittwoch, 17. März 2010 08:18
    Moderator

Alle Antworten

  • Hallo,
    ich habe eine Textbox mit der ich die Parameter fürs Gridview eingebe. (Access Source)
    vorab der Hinweis, dass AccessDataSource, SqlDataSource, ... nicht wirklich das sind, was Du nehmen solltest. Siehe hierzu bspw.:
    http://karsan.de/2008/06/06/asp-net-handarbeit-statt-datasource/
    Nun habe ich ein anderes Gridview (SQL Source) das auf die Daten der 2. Spalte vom 1. Gridview abfragen soll.

    Ich habe mir schon gedacht das ich den Spaltenwert temporär in ein Label schreibe und im 2. Gridview dann sage WHERE (Nr = ?) und <asp:FormParameter FormField="labelTemp" Name="Nr" Type="String" />.
    Ka ob das geht. Habe bisher auch noch nichts gefunden wie ich einen Spaltenwert einem Label zuordnen kann :/.
    Willst Du auf alle Werte, die in der zweiten Spalte vorkommen, abfragen? Oder nur auf einen bestimmten, bspw. den Wert im aktuell selektierten Datensatz?

    Grundsätzlich solltest Du, wenn Du auf Werte aus einer Datenbank abprüfen willst, auch über die Datenbank gehen. In dem Fall wäre das dann bspw. eine Abfrage in der Art wie:

    SELECT ... FROM ... WHERE <Feld> = <Eingabewert> AND <AnderesFeld> IN ( SELECT <Spalte> FROM <AndereTabelle> )
    
    <Eingabewert> ist dabei dann der Wert aus deiner TextBox, <Spalte> entspricht der Spalte in der Tabelle, die in der zweiten Spalte deines GridView Controls dargestellt wird.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Mittwoch, 10. März 2010 07:49
    Moderator
  • Hallo Stefan,

    vorab der Hinweis, dass AccessDataSource, SqlDataSource, ... nicht wirklich das sind, was Du nehmen solltest. Siehe hierzu bspw.:
    http://karsan.de/2008/06/06/asp-net-handarbeit-statt-datasource/
    ich beschäftige mich erst seit gut 2 Wochen mit dem Thema, das war mir nicht bekannt danke!
    Ich bin aber erstmal froh wenn es "so" läuft.
    Besser machen geht dann immer noch :).

    Willst Du auf alle Werte, die in der zweiten Spalte vorkommen, abfragen? Oder nur auf einen bestimmten, bspw. den Wert im aktuell selektierten Datensatz?

    Grundsätzlich solltest Du, wenn Du auf Werte aus einer Datenbank abprüfen willst, auch über die Datenbank gehen. In dem Fall wäre das dann bspw. eine Abfrage in der Art wie:

    SELECT
    
    ... FROM
    
     ... WHERE
    
     <Feld> = <Eingabewert> AND
    
     <AnderesFeld> IN
    
     ( SELECT
    
     <Spalte> FROM
    
     <AndereTabelle> )
    
    <Eingabewert> ist dabei dann der Wert aus deiner TextBox, <Spalte> entspricht der Spalte in der Tabelle, die in der zweiten Spalte deines GridView Controls dargestellt wird.
    Ich will erstmal nur auf einen bestimmen Wert abfragen.
    Es ist so das ich im ersten Gridview nach vielen Parametern suchen kann, im 2. Jedoch nur nach einem. Deshalb brauche ich erst den Wert vom 1. Gridview damit ich das 2. erstellen kann.
    Kann ich WHERE Teil auch eine Tabelle in einer andere DataSource angeben?
    Bspw (Pseudo Code ;) ).:

    WHERE  EineTabellevom2.Gridview.Nr IN (SELECT Nr FROM AccessDatasource2.Tabelle1)

    Gruß sim_n
    Mittwoch, 10. März 2010 08:17
  • Hallo,
    Ich will erstmal nur auf einen bestimmen Wert abfragen.
    Es ist so das ich im ersten Gridview nach vielen Parametern suchen kann, im 2. Jedoch nur nach einem. Deshalb brauche ich erst den Wert vom 1. Gridview damit ich das 2. erstellen kann.
    Kann ich WHERE Teil auch eine Tabelle in einer andere DataSource angeben?
    auf welchen "bestimmten" Wert willst Du denn abfragen, wenn Du mehrere Datensätze erhältst? Wenn Du bspw. sowas zurück erhältst:

    Spalte1   Spalte2  ...
    Wert A    1
    Wert B    7
    Wert X    0815

    Nach was soll dann im 2. GridView gefiltert werden? Nach 1? 7? 0815? Alles zusammen?


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Mittwoch, 10. März 2010 08:28
    Moderator
  • Hallo,

    auf welchen "bestimmten" Wert willst Du denn abfragen, wenn Du mehrere Datensätze erhältst? Wenn Du bspw. sowas zurück erhältst:

    Spalte1   Spalte2  ...
    Wert A    1
    Wert B    7
    Wert X    0815

    Nach was soll dann im 2. GridView gefiltert werden? Nach 1? 7? 0815? Alles zusammen?

    Am besten wäre es wenn er für jeden Wert ein neues Gridview erstellt. Soweit war ich aber noch nicht.
    Im Prinzip reicht erst mal der erste Wert aus Spalte 2.

    Gruß sim_n
    Mittwoch, 10. März 2010 08:35
  • Hallo,
    Am besten wäre es wenn er für jeden Wert ein neues Gridview erstellt. Soweit war ich aber noch nicht.
    Im Prinzip reicht erst mal der erste Wert aus Spalte 2.
    also eine Verschachteltung von GridView Controls.

    Dazu gibt es in der MSDN ein passendes Beispiel.

    http://msdn.microsoft.com/de-de/library/aa992038.aspx

    Alternativ auch noch:

    http://msdn.microsoft.com/de-de/magazine/cc500643.aspx

    Wobei man natürlich auch mit einem Repeater Control (oder DataList, ListView, ...) arbeiten kann.

    http://blog.thomasbandt.de/39/1544/de/blog/aspnet-20-verschachtelte-repeater-und-databinding.html


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Mittwoch, 10. März 2010 08:57
    Moderator
  • Sorry für die späte Rückmeldung.

    Irgendwie komm ich nicht weiter.
    Über die Verschachtelung könnte ich in jeder Gridview Zeile ein Detailsview integrieren.
    Ich möchte das Detailsview aber seperat, unter dem Gridview erzeugen.

    Das Hauptproblem ist aber das ich es nicht schaff dass, das Detailview die Nr verwendet die im Gridview erzeugt wurde und dann diese auf SQL DB abprüft.

    Es sollte so ablaufen.
    1. In Textbox Suchbegriff eingeben
    2. Gridview wird erzeugt mit Name... Nr.. etc.
    3. Detailsview wird erzeugt mit Nr von Gridview

    Der letzte Punkt bringt mich aber zum Verzweifeln.

    Gruß sim_n
    Dienstag, 16. März 2010 08:48
  • Hi,
    Über die Verschachtelung könnte ich in jeder Gridview Zeile ein Detailsview integrieren.
    Ich möchte das Detailsview aber seperat, unter dem Gridview erzeugen.
    Dann mach das doch!? Du bist ja nicht gezwungen, das neue Control innerhalb der Zeile zu erstellen.

    <asp:GridView ...>
        ...
    </asp:GridView>
    
    <br />
    
    <asp:PlaceHolder ID="DetailViewsContainer" runat="server" />
    

    In dem Fall kannst Du dann das den Code so aufbauen, dass dein DetailsView Control in den Placeholder kommt.

    Dim MyNewControl As DetailsView
        ...
    
        DetailsViewContainer.Controls.Add( MyNewControl )
    

    Das Hauptproblem ist aber das ich es nicht schaff dass, das Detailview die Nr verwendet die im Gridview erzeugt wurde und dann diese auf SQL DB abprüft.
    Welche Nummer wurde denn im GridView erzeugt ? Die Werte kommen doch aus der Datenbank und stehen bspw. im RowDataBound Event e.Row.DataItem( ... ) zur Verfügung.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
    Mittwoch, 17. März 2010 08:18
    Moderator
  • Hallo sim_n,

    Hat Dir die Antwort geholfen?

    Grüße,
    Robert

    Mittwoch, 24. März 2010 17:07
    Moderator
  • Hallo sim_n,

    Ich gehe davon aus, dass die Antwort Dir weitergeholfen hat.
    Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.

    Grüße,
    Robert

    Donnerstag, 25. März 2010 13:31
    Moderator