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

 

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

C# DatagridView Cell click event

Îåêßíçóå áðü ôï ìÝëïò Tmark. Τελευταία δημοσίευση από το μέλος KelMan στις 20-03-2009, 09:18. Υπάρχουν 36 απαντήσεις.
Σελίδα 2 από 3 (37 εγγραφές)   < 1 2 3 >
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  18-03-2009, 00:53 49314 σε απάντηση της 49303

    Απ: C# DatagridView Cell click event

    Δεν υπάρχει .Item property για την C#, θα πρέπει να δουλέψεις με indexers.

    π.χ.  this.DataGridViewName["columnName", rowIndex].Value;
            this.DataGridViewName[columnIndex, rowIndex].Value;

    http://msdn.microsoft.com/en-us/library/ms158657(VS.85).aspx

  •  18-03-2009, 01:23 49315 σε απάντηση της 49314

    Απ: C# DatagridView Cell click event

    το ιδιο δεν ειναι μ αυτο που ειπα πριν,Huh?

    http://www.dotnetzone.gr/cs/forums/permalink/49314/49279/ShowThread.aspx#49279

    αναθεμα την c#Stick out tongue


    This Business Is Binary. You are a 1 or a 0. Alive or Dead.-
  •  18-03-2009, 01:43 49316 σε απάντηση της 49315

    Απ: C# DatagridView Cell click event

    Όχι μαν δεν είναι το ίδιο,

    1ον: δεν βάζεις παρενθέσεις για να δηλώσεις τους indexers. βαζεις square brackets => [indexer].
    2ον: το property Value δεν επιστρέφει string αλλά object, η θα το κάνεις cast στον τύπο που θέλει,
            ή απλά θα κάνει .ToString().

    Αυτό που θέλει δηλαδή το παλικάρι γίνεται έτσι:

                string valGridCell = this.customersDataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString();
                MessageBox.Show(valGridCell);

    Ελπίζω να βοήθησα :D .


  •  18-03-2009, 08:47 49321 σε απάντηση της 49316

    Απ: C# DatagridView Cell click event

    Να σαι καλά gtas ,δούλεψε έτσι!Απλά θέλω να μου εξηγήσεις κάτι,το e.rowindex επιστρέφει το index του cell που πάτησα,σωστά?

    P.S.John σε ευχαριστώ πολύ για την βοήθεια κι εσένα

    Knowing is not enough , you must apply.
    Willing is not enough , you must do.
  •  18-03-2009, 09:19 49324 σε απάντηση της 49321

    Απ: C# DatagridView Cell click event

    Tmark:
    Να σαι καλά gtas ,δούλεψε έτσι!Απλά θέλω να μου εξηγήσεις κάτι,το e.rowindex επιστρέφει το index του cell που πάτησα,σωστά?


    Σωστά, χάρηκα που δούλεψε ;)

  •  18-03-2009, 09:26 49325 σε απάντηση της 49324

    Απ: C# DatagridView Cell click event

    :)
    Τώρα το θέμα είναι με το click του cell να τρέχει ένα SQL query που θα τραβάει τα αντίστοιχα στοιχεία (master-detail) ανάλογα με ποίο cell πατήθηκε..

    Knowing is not enough , you must apply.
    Willing is not enough , you must do.
  •  18-03-2009, 10:06 49330 σε απάντηση της 49325

    Απ: C# DatagridView Cell click event

    Δεν είναι και τόσο σωστή η προσέγγιση σου... Χρησιμοποιείς BindingSource; Αν όχι, τότε θα πρέπει να κάνεις το εξής:

    Βάζεις το BindingSource control και θέτεις το DataSource property του να βλέπει τα data σου. Κατόπιν κάνεις bind το DataGridView πάνω στο BindingSource.

    Αν έχεις ήδη το BindingSource, τότε κακώς δεν το χρησιμοποιείς. Είναι ένα *μαγικό* control το οποίο λειτουργεί ως κεντρικό hub των data που κάνεις bind. Πάνω σε αυτό κάνουν bind όόόλα τα controls (που θέλουν να δείξουν τα data που περιέχει). Έχει δύο βασικά properties Filter και Sort στα οποία όταν δώσεις κατάλληλες τιμές, αυτόματα ενημερώνονται όλα τα controls που είναι binded πάνω του. Επιπρόσθετα, υπάρχει το Current property που δείχνει το τρέχον item. Μάντεψε! Είναι αυτό που δείχνει το selected row στο DataGridView! Οπότε ανά πάσα στιγμή έχεις το επιλεγμένο row, δεν χρειάζεται να ψάχνεις στα rows και columns του DataGridView! Επιπρόσθετα, το BindingSource έχει πλήθος από events που μπορούν να σου χρησιμεύσουν.

    Άρα η λογική σου θα είναι η εξής: Στο click event του DataGridView (ή σε οποιοδήποτε event που σημαίνει ότι ο χρήστης θέλει να πάρει τα details), ρωτάς το BindingSource ποιό είναι το current row, το μετατρέπεις κατάλληλα ώστε να έχεις τα πεδία, φωνάζεις τη φόρμα και της περνάς ως παράμετρο την εγγραφή. Στη νέα φόρμα κάνεις extra queries για τα details.

    Ποιό είναι το πλεονέκτημα αυτής της λύσης: Κάνεις decoupling τα controls μεταξύ τους. Πολύ σημαντικό! Η λογική σου θα συνεχίζει να παίζει άσχετα αν αποφασίσεις να αλλάξεις το DataGridView με κάτι άλλο ή  να αλλάξεις τις συνθήκες κάτω από τις οποίες εμφανίζονται τα details.


    Vir prudens non contra ventum mingit
  •  18-03-2009, 11:18 49339 σε απάντηση της 49330

    Απ: C# DatagridView Cell click event

    KelMan:


    Βάζεις το BindingSource control και θέτεις το DataSource property του να βλέπει τα data σου. Κατόπιν κάνεις bind το DataGridView πάνω στο BindingSource.




    Όταν εννοείς ότι βάζω το datasource να βλέπει τα data,ποιά data εννοείς?Δεν έχω κάποιο standard dataset στα Data sources,τραβάω απλά τα data που θέλω κάθε φορά.

    Knowing is not enough , you must apply.
    Willing is not enough , you must do.
  •  18-03-2009, 12:00 49343 σε απάντηση της 49339

    Απ: C# DatagridView Cell click event

    Όταν λες "τραβάς", πώς τα τραβάς και που πάνε τα data; Για να τα δείξεις στο DataGridView θα πρέπει να βάλεις το DataSource property του DataGridView να δείχνει κάπου; Που δείχνει τώρα;


    Vir prudens non contra ventum mingit
  •  18-03-2009, 12:31 49346 σε απάντηση της 49343

    Απ: C# DatagridView Cell click event

    μπα δεν το εχει ετσι ο φιλος με bindingControl, το κανει με κωδικα, κοιτα αυτο που σου λεει ο KelMan ειναι ενας τρόπος(και καλος), αν ομως εσυ δεν θες να παιζεις με binding controls και απλα να κανεις οτι κανεις τωρα απλα με ενα άλλο sql query σε μια αλλη φορμα

    θα επαναλαβω οτι σου ειχα πει και πριν.

    εχουμε 2 φορμες με ολα τα απαραιτητα controls datagridview κτλ κτλ (οτι εχεις τωρα)

    -MasterForm.
    -DetailForm.

    Ανοιγεις την φορμα DetailForm και φτιαξε μια public μεταβλητη string. ας την πουμε SQLstring

    μετα απο την Master οταν θες να ανοιξη η νεα φορμα θα καλέσεις ενα νεο instance της φορμας (το γραφω σε vb Dim Dform as new DetailForm) και θα εχεις ετσι στο Dform αν πατησεις τελεία .  την δυνατοτητα να περάσεις τιμη στην μεταβλητη,

    DForm.SQLstring="select bla bla bla"

    μετα εμφανισε την Dform.Show και κανονικα μεσα στην DetailForm εσυ να εχεις κώδικα στο LOAD που με το ανοιγμα θα τρεχει ενα SQLquery με βάση οτι ειναι μεσα στην μεταβλητη SQLstring. οτι εχεις κανει ηδη δηαλδη στην MainForm απλα το SQL θα ειναι δυναμικο εδω, θα εινια αδειο και θα γεμίζει με το sql που θα στελνεις απο την βασικη σου φορμα τωρα που εχεις οτι πληροφοριες ηθελες να παρεις σχετικα με το row.

    ελπιζω τωρα να το καταλαβες και sorry an σε μπερδεψα.





    This Business Is Binary. You are a 1 or a 0. Alive or Dead.-
  •  18-03-2009, 12:44 49349 σε απάντηση της 49346

    Απ: C# DatagridView Cell click event

    Μα έτσι κι αλλιώς, όταν δείχνεις πράγματα στo DataGridView, με binding δουλεύεις - implicitly!

    Τι πάει να πει "με κώδικα"; Κάπου θα πρέπει να πεις "DataGridView.DataSource=XXXXXX" Εκτός αν κάνεις create τα columns και κάθε ένα row που δεν το συζητάω αυτό το σενάριο, είναι ή για εξαιρετικές περιπτώσεις ή για μαζοχιστές.

    Οπότε, το χρησιμοποιείς που το χρησιμοποιείς, γιατί να μην το εκμεταλλευτείς παραπάνω;


    Vir prudens non contra ventum mingit
  •  18-03-2009, 13:52 49355 σε απάντηση της 49349

    Απ: C# DatagridView Cell click event

    KelMan:

    Μα έτσι κι αλλιώς, όταν δείχνεις πράγματα στo DataGridView, με binding δουλεύεις - implicitly!

    Δουλεύω με BindingSource σχεδόν ευλαβικά. Από τότε, όμως, που ασχολούμαι με Linq2Sql και Entity Framework διαπιστώνω όλο και πιο πολύ ότι στα παραδείγματα το binding γίνεται πάνω στο datasource property του control. Η αλήθεια είναι ότι αυτό με παραξένεψε αρχικά και είπα να το ψάξω. Τελικά βρήκα ότι δεν έχει νόημα να χρησιμοποιήσει κανείς bindingsource control όταν τα objects δεν κάνουν implement το IEditableObject Interface. Χωρίς αυτό, πάνε περίπτατο τα BeginEdit(), EndEdit(), CancelEdit() και οι αλλαγές περνάνε αμέσως από το editing control (π.χ. το datagridview) στο object. Με άλλα λόγια, η BindingSource.EndEdit() που καλούμε συνήθως πριν αποθηκεύσουμε τις αλλαγές, είναι άχρηστη όσον αφορά στο EF. Επίσης, παίζοντας με το binding, διαπίστωσα ότι υπήρχαν περιπτώσεις που τα περιεχόμενα του context και της bindinglist δε συγχρονίζονταν. Η αλήθεια είναι ότι μεταχειρίστηκα το context σαν dataset (parent - child - grandchild και πάει λέγοντας). Μια ερμηνεία και κάποια hints όσον αφορά στο binding με EF βρήκα εδώ. Μάλλον με τη νέα έκδοση του VS πρέπει να περιμένουμε και αλλαγές/βελτιώσεις στην τεχνολογία του binding. Πάντως, προσωπικά αναθεωρώ την άποψή μου περί binding. Δε βολεύει να έχεις ένα context ανοιχτό και να του συμπεριφέρεσαι σα να είναι dataset. Προτιμώ να δημιουργώ το οποιοδήποτε object όταν το χρειάζομαι, να ενημερώνω τις μεταβολές στα properties explicitly και να αποθηκεύω ξανά. Νομίζω ότι αυτά που γράφω συμφωνούν με το πνεύμα του thread. Αν κάποιος έχει να κάνει κάποια παρατήρηση διαφορετική πάνω στην τοποθέτησή μου θα χαρώ να τη διαβάσω, γιατί κι εγώ ακόμα ψάχνομαι.


    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  18-03-2009, 15:39 49360 σε απάντηση της 49349

    Απ: C# DatagridView Cell click event

    KelMan:

    Μα έτσι κι αλλιώς, όταν δείχνεις πράγματα στo DataGridView, με binding δουλεύεις - implicitly!

    Τι πάει να πει "με κώδικα"; Κάπου θα πρέπει να πεις "DataGridView.DataSource=XXXXXX" Εκτός αν κάνεις create τα columns και κάθε ένα row που δεν το συζητάω αυτό το σενάριο, είναι ή για εξαιρετικές περιπτώσεις ή για μαζοχιστές.

    Οπότε, το χρησιμοποιείς που το χρησιμοποιείς, γιατί να μην το εκμεταλλευτείς παραπάνω;

    ειπα καλο αυτο που λες κι εγω ετσι θα το εκανα, αλλα δεν εχω καταλαβει 100% τι εχει φτιαξει ο φιλος μας......για αυτο λεω και εναλακτικες ιδεες μακαρι να ειχα τον κωδικα του να ειχα πληρη εικονα και να του πρωτειναμε την ιδανικοτερη για αυτον λυση.....


    This Business Is Binary. You are a 1 or a 0. Alive or Dead.-
  •  18-03-2009, 16:58 49368 σε απάντηση της 49360

    Απ: C# DatagridView Cell click event

    Λοιπόν τα data τα περνάω στο DatagridView με τον εξής τρόπο:

                SqlParameter[] oParam = new SqlParameter[1];
                oParam[0] = new SqlParameter("@Uni", SqlDbType.VarChar);
                oParam[0].Value = textbox1.text;
                DataSet ds = SqlHelper.ExecuteDataset(connectionString, CommandType.StoredProcedure, "StoredProcedure1", oParam);
                dataGridView1.DataSource = ds.Tables[0];

    Knowing is not enough , you must apply.
    Willing is not enough , you must do.
  •  18-03-2009, 17:10 49370 σε απάντηση της 49368

    Απ: C# DatagridView Cell click event

    Άρα λοιπόν, όταν λες

       dataGridView1.DataSource = ds.Tables[0];

    κάνεις το data binding. Έχοντας ένα BindingSource πάνω στη φόρμα (πχ BindingSource1) μπορείς να πεις

       BindingSource1.DataSource = ds.Tables[0];
       dataGridView1.DataSource = BindingSource1;

     

    @Markos: Χαίρομαι που έθιξες το θέμα, έχω πράγματα να κουβεντιάσουμε, θα ανοίξω ένα νέο thread.


    Vir prudens non contra ventum mingit
Σελίδα 2 από 3 (37 εγγραφές)   < 1 2 3 >
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems