Προς το περιεχόμενο

C#, asp.net, webpage και dataGridView


evagelos_21

Προτεινόμενες αναρτήσεις

Δημοσ.

Γεια σας παιδιά,

 

Εχω φτιάξει ένα dataGridView μέσα απο c# απο το visual studio.

Σε αυτό φέρνω κάτι τιμές απο ένα πίνακα απο μιοα βάση SQL.

Υπάρχει κάποιο event ώστε όταν κάνω κλικ σε μια γραμμή του dataGridView να μου γυρνάει πια γραμμή (ID) έκανα κλικ;

 

Υπάρχει άλλος τρόπος πιο εύκολος;

 

Ευχαριστώ

Δημοσ.

Ψαχνεις για το index της γραμμης ή για το ID του αντικειμενου που δειχνεις στο πινακα; Αν ειναι το 2ο, το ID σου ερχεται με το Query;

Δημοσ.

Εγώ έχω ενα Gridview στο οποίο έχω διάφορες γραμμές και στην αρχή του έχω προσθέσει μια extra στήλη στην οποία είναι update button στην ουσία ( το έχω ονομάσει παραλαβή) και όταν πατάω πάνω του παίρνει το ID της γραμμής και κάνει update τον πίνακα στον SQL Server.

 

Αυτό το έκανα με τον εξής τρόπο, στο event RowEditing του Gridview:

 

 

>protected void GvPrepaid_RowEditing(object sender, GridViewEditEventArgs e)
       {

           int aa = Convert.ToInt32(Convert.ToString(GvPrepaid.Rows[e.NewEditIndex].Cells[1].Text)); //pairnw to id tis grammis pou exw dialexei sto gridview
           string Id = aa.ToString();
           ViewState.Add("id", Id);
           Control ctr = GvPrepaid.Rows[e.NewEditIndex].Cells[11].Controls[0];
           CheckBox ch = (CheckBox)ctr;
           string check;

           try
           {
               if (ch.Checked == true)
               {

                   check = "1";
                   Response.Redirect("InsertServedCust.aspx?id=" + Id + "&ch=" + check,false);



               }
               else
               {
                   check = "0";
                   Response.Redirect("InsertServedCust.aspx?id=" + Id + "&ch=" + check,false);
               }
           }
           catch (Exception ex)
           {
               
           }

Δημοσ.

Οκ το έπιασα με το Query.

Το datagridview διαβάζει απο ένα πίνακα βάσης.

Τα πεδία του πίνακα είναι id,name,date,remarks.

Tα πεδία που φέρνω στο grid της 1ης σελίδας, είναι το name και το date.

To id δεν το φέρνω, γιατί δεν θα είναι ωραίο να εμφανίζεται.

Αυτό που θέλω να κάνω είναι όταν κάνω κλικ πάνω στην γραμμή του grid της 1ης σελίδας, να ανοίγει μια καινούργια σελίδα, με όλα τα πεδία της γραμμής(name,date,remarks).

Το πρόβλημα είναι ότι δεν μπορώ να "δεσω" τις 2 σελίδες μιας και το πεδίο id που είναι το id της γραμμής απουσιάζει απο το 1ο και 2ο grid με αποτέλεσμα να μην μπορώ να το βάλω στο where statement της 2ης σελίδας.

Δημοσ.

Μπορείς να φέρεις και το id και απλά να ορίσεις την στήλη αυτή visible=false ώστε να μην φαίνεται στον χρήστη. Προγραμματιστικά όμως θα έχεις πρόσβαση.

Δημοσ.

Στο GridView μπορείς να ορίσεις ένα <ItemTemplate> μέσα σε ένα <asp:TemplateField>. Εκεί μπορείς να ορίσεις τι θα περιέχει το κελί του GridView σου. Για να αναφερθείς σε οποιοδήποτε πεδίο του πίνακα που φορτώνεις χρησιμοποιείς την Eval("").

>
       <asp:GridView ID="GridView1" runat="server">
               <Columns>
                       ...
                       <asp:TemplateField HeaderText="">
                               <ItemTemplate>
                                       <asp:HyperLink runat="server" Text="Επεξεργασία" NavigateUrl='<%# "~/edit_item.aspx?id=" & Eval("id") %>'></asp:HyperLink>
                           	</ItemTemplate>
                       </asp:TemplateField>
               </Columns>
    	</asp:GridView>

Το να χρησιμοποιείς εντολές τύπου "row.Cells[4].Text;" δεν είναι κ πολύ πρακτικό, διότι σε αναγκάζει να έχεις τα πεδία σου σε συγκεκριμένες στήλες. Αν π.χ. αλλάξεις τη θέση των πεδίων σου στο GridView θα πρέπει να αλλάξεις κ την αρίθμηση.

 

>
          MessageBox.Show(x);

 

Ερώτηση: Μιλάμε για asp.net εφαρμογή ή windows application;

Δημοσ.

Ερώτηση: Μιλάμε για asp.net εφαρμογή ή windows application;

 

το είδα και αυτό.

Το άλλαξα και το έκανα έτσι και μου παίζει:

>
Response.Write("<script>alert('" + x + "') </script>");

 

Sorry αλλά τώρα κάνω τα 1α βήματα.

 

Στο GridView μπορείς να ορίσεις ένα <ItemTemplate> μέσα σε ένα <asp:TemplateField>. Εκεί μπορείς να ορίσεις τι θα περιέχει το κελί του GridView σου. Για να αναφερθείς σε οποιοδήποτε πεδίο του πίνακα που φορτώνεις χρησιμοποιείς την Eval("").

>
       <asp:GridView ID="GridView1" runat="server">
               <Columns>
                       ...
                       <asp:TemplateField HeaderText="">
                               <ItemTemplate>
                                       <asp:HyperLink runat="server" Text="Επεξεργασία" NavigateUrl='<%# "~/edit_item.aspx?id=" & Eval("id") %>'></asp:HyperLink>
                           	</ItemTemplate>
                       </asp:TemplateField>
               </Columns>
    	</asp:GridView>

Το να χρησιμοποιείς εντολές τύπου "row.Cells[4].Text;" δεν είναι κ πολύ πρακτικό, διότι σε αναγκάζει να έχεις τα πεδία σου σε συγκεκριμένες στήλες. Αν π.χ. αλλάξεις τη θέση των πεδίων σου στο GridView θα πρέπει να αλλάξεις κ την αρίθμηση.

 

 

Δηλαδή τι πρέπει να γράψω που, γιατί σε έχασα. :)

Σε εμένα έχει αυτα:

>
       <Columns>
           <asp:BoundField DataField="date" HeaderText="Ημερομηνία" ReadOnly="True" 
               SortExpression="date"></asp:BoundField>
           <asp:BoundField DataField="remarks_small" HeaderText="Περιγραφή" 
               SortExpression="remarks_small"></asp:BoundField>
           <asp:BoundField DataField="name" HeaderText="Κατηγορία" SortExpression="name">
           </asp:BoundField>
           <asp:BoundField DataField="news" HeaderText="news" InsertVisible="False" 
               ReadOnly="True" SortExpression="news" Visible="False"></asp:BoundField>
       </Columns>

 

Ο κώδικας πρέπει να μπει ανάμεσα στο κάθε <asp> του Column;

 

Οκ

Μάλλον αρχίζω και βρίσκω άκρη

 

Thanks και πάλι

Δημοσ.

Κάθε asp item του Columns είναι κ μία στήλη του GridView. Τα boundfields τυπώνουν απλά τη τιμή του κελιού. Με templatefield έχεις άνεση να εμφανίσεις όπως θέλεις τα κελιά της στήλης

Δημοσ.

Το GriView πάντως έχει και ένα property που λέγεται "DataKeyNames" όπου βάζεις τα ονόματα των στηλών που κάνουν κάθε εγγραφή μοναδική.

Μετά μπορείς να πάρεις τις τιμές τους από το property SelectedDataKey. Μάλιστα διατηρεί και τους τύπους δεδομένων και έτσι δεν χρειάζεται μετατροπή από string.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...