Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Nested Gridview

Îåêßíçóå áðü ôï ìÝëïò pan. Τελευταία δημοσίευση από το μέλος pan στις 22-08-2006, 10:29. Υπάρχουν 5 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  08-08-2006, 13:53 15580

    Nested Gridview

    Για χαρα παιδια. Αν και διαβασα ορισμένα άρθρα πώς δουλεύει το Nested Gridview δεν έχω καταφέρει να υλοποιήσω το παρακάτω :

     

    <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:workflowConnectionString %>"

    SelectCommand="SELECT grps_id, Title FROM tb_groups" />

    <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AutoGenerateColumns="False" OnRowDataBound="GridView1_RowDataBound">

    <Columns>

    <asp:BoundField DataField="Title" HeaderText="Title" SortExpression="Title" />

    <asp:TemplateField HeaderText="Users">

    <ItemTemplate>

    <asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:workflowConnectionString %>"

    SelectCommand="SELECT users_id, usersTeam FROM [tb_users] WHERE ([grps_id] = @grps_id)">

    <SelectParameters>

    <asp:Parameter Name="grps_id" Type="Int32" />

    </SelectParameters>

    </asp:SqlDataSource>

    <asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource2" GridLines="None">

    <Columns>

    <asp:BoundField DataField="users_id" HeaderText="users_id" SortExpression="users_id" />

    <asp:TemplateField>

    <ItemTemplate>

    <asp:ListBox runat="server" ID="usersTeam" SelectedValue='<%# Eval("usersTeam") %>' Rows="1" AutoPostBack="True" >

    <asp:ListItem Text="Team 1" Value="1" />

    <asp:ListItem Text="Team 2" Value="2" />

    <asp:ListItem Text="Team 3" Value="3" />

    </asp:ListBox>

    </ItemTemplate>

    </asp:TemplateField>

    </Columns>

    </asp:GridView>

    </ItemTemplate>

    </asp:TemplateField></Columns>

    </asp:GridView>

     

    </FONT><FONT color=#0000ff><FONT size=2>

    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)

    {

    if (e.Row.RowType == DataControlRowType.DataRow)

    {

    SqlDataSource ChildSQL = (SqlDataSource)e.Row.FindControl("SqlDataSource2");

    ChildSQL.SelectParameters[0].DefaultValue = e.Row.Cells[0].Text;

    }

    }</FONT></FONT>

    <FONT color=#0000ff>

     

    Mεχρι εδώ καλά. Μου τυπώνει το Nested Gridview. Εγώ θέλω όμως 2 παραπάνω πράγματα:

    α) Πώς μπόρω να κάνω Request την τιμή από το Listbox (ανήκει στο 2ο Gridview) ?

    β) Για όσες εγγραφές που έχουν τιμή 2 να μην εμφανίζεται το listbox, αλλά ένα label και να γράφει κάτι μέσα την selected value  ή   πιο απλά να είναι το listbox disabled  με  selected value την τιμή 2 ...

     

    Ευχαριστώ

  •  08-08-2006, 15:31 15587 σε απάντηση της 15580

    Απ: Nested Gridview

    το δεύτερο που ζητάς είναι πιο εύκολο. Χρειάζεσαι μια ondatabound για τη nested gridview (έχω χρόνια να γράψω σε C αλλά πάρε την ιδέα και φτιάξε το) :

    <asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource2" GridLines="None" OnRowDataBound="GridView2_RowDataBound">

    protected void GridView2_RowDataBound(object sender, GridViewRowEventArgs e){
       if (e.Row.RowType == DataControlRowType.DataRow){
          listBox teamListBox= (listBox )e.Row.FindControl("usersTeam");
          if (teamListBox.selectedValue == 2)
             teamListBox.enabled = 0;
       }                                             
    }

    για να μην εμφανίζεται το listbox θα πρέπει να βάλεις και το label μέσα στο Gridview και ανάλογα να εμφανίζεις το ένα και να κρύβεις το άλλο.

    Τώρα για το request εξαρτάται πότε θέλεις να το κάνεις και ποιας γραμμής το listbox θέλεις. Για παράδειγμα αν θέλεις να έχεις ένα κουμπί σε κάθε γραμμή και στο click να στέλνεις το request θα πρέπει να πάρεις το Indexrow και με findControl να βρεις την τιμή

  •  09-08-2006, 11:23 15594 σε απάντηση της 15587

    Απ: Nested Gridview

    Λοιπόν δεν μπόρεσα να κάνω αυτό με το button και το RowIndex αλλά ο παραπάνω κώδικας σου με βοήθησε να κάνω έναν "μπακάλικο" τρόπο και παίζει μια χαρά.

    Αντί για asp:ListBox έφτιαξα ένα html select με τα τρία <option> και στο onChange του <select > καλώ μια javascript function που γεμίζει 2 άδειες hidden HTML φόρμες(οχι asp:HiddenField). Οπότε όταν επιλέξω ένα <option> , γεμίζω με το SelectedValue την μία hidden, και με την άλλη με το, users_id, το Primary Key του πίνακα μου. Κάνω submit την form1 και στο Page_Load παίρνω με Request.Form["hidden01"] και Request.Form["hidden02"] και κάνω το αντίστοιχο update στην βάση.

    έκανα και αυτό που είπες με το να εμφανίζω και να κρύβω μία το ένα και μία το άλλο. Εβαλα όλο το HTML <select> μέσα σε ένα δεύτερο label.

    Αν έχει την τιμή που θέλω μου εμφανίζει το απλό label και μου κρύβει το label που περιέχει το  HTML <select>, και αντίστροφα

  •  09-08-2006, 12:14 15595 σε απάντηση της 15580

    Απ: Nested Gridview

    Στα γρήγορα οι απαντήσεις που ψάχνεις είναι οι εξής:

    1. Για να πάρεις την τιμή του listbox θα κάνεις GridView2.FindControl("userTeam"). Θα κάνεις cast το αποτέλσεμα σε (ListBox) και θα πάρεις ό,τι τιμή θέλεις..
    2. Για να εμφανίσεις ή να κρύψεις το ListBox υπάρχει και πιο κομψός τρόπος: Βάλε στο tag ένα
      Visible='<%# ((int) Eval("usersTeam")) != 2 %>'

    Δεν δοκίμασα το sytnax αλλά κάπως έτσιι είναι...

    Sorry για την βιασύνη...

    rousso


    rousso
  •  09-08-2006, 13:57 15597 σε απάντηση της 15595

    Απ: Nested Gridview

    - το gridView2.findControl("userTeam") πώς ξέρεις ποιο Listbox θα διαλέξει αφού κάθε γραμμή έχει το δικό της;

  •  22-08-2006, 10:29 15741 σε απάντηση της 15580

    Απ: Nested Gridview

    Αν βρει ή γνωρίζει κάποιος πώς μπορεί να επιλυθεί η παραπάνω ερώτηση του agmarios ας μας πει. Όπως το υλοποίησα εγώ με το έχει ένα σημαντικό bug.

    Γίνετε το postback αλλά ΔΕΝ ανανεώνονται τα περιεχόμενα της σελιδας. Δηλ κανονικά εκτελείτε το update με το πρώτο Refresh ΑΛΛΑ με το 2ο refresh(manual πατώντας F5) φέρνει τα updated αποτελέσματα.

    Οπότε αναγκάζομαι να κανω response.redirect στην ίδια σελιδα ΑΛΛΑ έτσι χάνετε το paging
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems