evagelos_21 Δημοσ. 7 Φεβρουαρίου 2011 Δημοσ. 7 Φεβρουαρίου 2011 Γεια σας παιδιά, Εχω φτιάξει ένα dataGridView μέσα απο c# απο το visual studio. Σε αυτό φέρνω κάτι τιμές απο ένα πίνακα απο μιοα βάση SQL. Υπάρχει κάποιο event ώστε όταν κάνω κλικ σε μια γραμμή του dataGridView να μου γυρνάει πια γραμμή (ID) έκανα κλικ; Υπάρχει άλλος τρόπος πιο εύκολος; Ευχαριστώ
Crizzt Δημοσ. 7 Φεβρουαρίου 2011 Δημοσ. 7 Φεβρουαρίου 2011 Ψαχνεις για το index της γραμμης ή για το ID του αντικειμενου που δειχνεις στο πινακα; Αν ειναι το 2ο, το ID σου ερχεται με το Query;
Tmark Δημοσ. 8 Φεβρουαρίου 2011 Δημοσ. 8 Φεβρουαρίου 2011 Εγώ έχω ενα 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) { }
evagelos_21 Δημοσ. 8 Φεβρουαρίου 2011 Μέλος Δημοσ. 8 Φεβρουαρίου 2011 Οκ το έπιασα με το 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ης σελίδας.
computeras13 Δημοσ. 8 Φεβρουαρίου 2011 Δημοσ. 8 Φεβρουαρίου 2011 Μπορείς να φέρεις και το id και απλά να ορίσεις την στήλη αυτή visible=false ώστε να μην φαίνεται στον χρήστη. Προγραμματιστικά όμως θα έχεις πρόσβαση.
evagelos_21 Δημοσ. 8 Φεβρουαρίου 2011 Μέλος Δημοσ. 8 Φεβρουαρίου 2011 Το έβαλα αλλά όταν του λέω να μου δείκει την τιμή του μου πετάει κενό: > GridViewRow row = GridView1.SelectedRow; String x = row.Cells[4].Text; MessageBox.Show(x);
_tasos Δημοσ. 8 Φεβρουαρίου 2011 Δημοσ. 8 Φεβρουαρίου 2011 Στο 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;
evagelos_21 Δημοσ. 9 Φεβρουαρίου 2011 Μέλος Δημοσ. 9 Φεβρουαρίου 2011 Ερώτηση: Μιλάμε για 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 και πάλι
_tasos Δημοσ. 9 Φεβρουαρίου 2011 Δημοσ. 9 Φεβρουαρίου 2011 Κάθε asp item του Columns είναι κ μία στήλη του GridView. Τα boundfields τυπώνουν απλά τη τιμή του κελιού. Με templatefield έχεις άνεση να εμφανίσεις όπως θέλεις τα κελιά της στήλης
kagelos Δημοσ. 9 Φεβρουαρίου 2011 Δημοσ. 9 Φεβρουαρίου 2011 Το GriView πάντως έχει και ένα property που λέγεται "DataKeyNames" όπου βάζεις τα ονόματα των στηλών που κάνουν κάθε εγγραφή μοναδική. Μετά μπορείς να πάρεις τις τιμές τους από το property SelectedDataKey. Μάλιστα διατηρεί και τους τύπους δεδομένων και έτσι δεν χρειάζεται μετατροπή από string.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.