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

 

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

και μια δύσκολη ερώτηση..

Îåêßíçóå áðü ôï ìÝëïò Pilgrim. Τελευταία δημοσίευση από το μέλος Pilgrim στις 19-08-2005, 23:07. Υπάρχουν 4 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  17-08-2005, 21:15 4360

    και μια δύσκολη ερώτηση..

    το case έχει ως εξής.

    Έχω κάνει drag τα στοιχεία απο ένα datagrid και θέλω να τα κάνω drop σε ένα άλλο datagrid.
    Το πρώτο είναι σχετικά εύκολο μέσω του hittest. δηλ :

            private void gridTable_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
            {
                sourceControl = (DataGrid)sender;
                mouseButton  = e.Button;
                System.Windows.Forms.DataGrid.HitTestInfo hitInfo = ((DataGrid)sender).HitTest(e.X, e.Y);

                bool CellHit =(hitInfo.Type == System.Windows.Forms.DataGrid.HitTestType.RowHeader);
                bool LeftMouseButton = (mouseButton==System.Windows.Forms.MouseButtons.Left);
                if(LeftMouseButton && CellHit)
                {
                    string gridname = ((DataGrid)sender).Name.ToString();
                    int dragrow = Convert.ToInt32(((DataGrid)sender).HitTest(e.X,e.Y).Row.ToString());
                    DataView dv = ((DataView)((DataGrid)sender).DataSource);
                    DataRow dr = dv.Table.Rows[dragrow];
                    int i=0;
                    string mydata="";

                    foreach(System.Data.DataColumn col in dv.Table.Columns)
                    {
                        mydata+=gridname+"_"+col.ColumnName.ToString()+":"+ drIdea [I].ToString()+"|";
                        i++;
                    }

                    ((DataGrid)sender).DoDragDrop(mydata,DragDropEffects.Copy);
                }
          }

    Όπως φαίνεται στην πραγματικότητα τα "αποθηκεύω" σε text μορφή delimited με ένα χαρακτήρα (το pipe) για να τα αποσυνθέσω κατά το drop.
    Και στην πραγματικότητα μου αρκεί να ξέρω το σε ποιό cell θα "ρίξω" τα data, το οποίο cell είναι ένα unique id οπότε θα μπορούσα
    να κάνω ένα update στην βάση και rebind το grid για να προσομοιώσω το drag'n'drop effect που θέλω να πετύχω.
    Το πρόβλημά μου και η ερώτηση είναι ότι στο source-grid εντάξει, ξέρω σε ποιό row/cell έκανε click ο χρήστης, γιατί επιλέγει τι θα κάνει drag με click.
    Στο drop όμως, προσδιορίζει το που θα "ρίξει" αυτό που κάνει drag με το mouse-over. Άρα δεν έχω την HitTest στην διάθεσή μου...για να βρώ το id κλπ...
    Και απο όσο είδα το datagrid δεν έχει κάτι σε mouse-over event...

    Σκέφτομαι κάπως να βρίσκω το handle του control .. αλλά έχω κολλήσει λίγο στην προσέγγιση.
    Και όσο το ψάχνω είπα να κάνω ένα post. ;-)

    Οποιαδήποτε βοήθεια ευπρόσδεκτη.


  •  18-08-2005, 14:50 4391 σε απάντηση της 4360

    Απ:και μια δύσκολη ερώτηση..

    Συνημμένα: Drag&Drop.zip

    Ρίξε μια ματιά στο attached Project.


    Sex is like programing; One mistake, and you will have to support it for the rest of your life…
  •  19-08-2005, 09:41 4409 σε απάντηση της 4391

    Απ:και μια δύσκολη ερώτηση..

    raphael ευχαριστώ.
    Το κομμάτι κώδικα που μου έλειπε ήταν το :

                int droprow;
                int x;
                int y;
                Point pt;
                pt=((DataGrid)sender).PointToClient(new Point(e.X,e.Y));
                x=pt.X;
                y=pt.Y;
                droprow = ((DataGrid)sender).HitTest(x ,y).Row;


    μέχρι εδώ καλά ξέρω ποιό είναι το row στο οποίο πάω να κάνω το drop. Και μάλιστα αν δεν έχω rows στο target-grid είναι -1 που και
    αυτό βολεύει για να ξέρω ότι θα κάνω insert και όχι update.

    Η επόμενη ερώτηση είναι πως βρίσκω το περιεχόμενο ενός cell στο target-grid.... ??
    δηλ. κάτι σαν :

    string cellvalue = ((DataGrid)sender).Column[0].]Rows.[droprow]


    ????
  •  19-08-2005, 12:10 4420 σε απάντηση της 4409

    Απ:και μια δύσκολη ερώτηση..

    (((DataTable)((DataGrid)sender).DataSource).Rows[dragrow][dragColumn].ToString());

    το DragColumn το έχεις και αυτό από το HitTestInfo.




    Sex is like programing; One mistake, and you will have to support it for the rest of your life…
  •  19-08-2005, 23:07 4439 σε απάντηση της 4420

    Απ:και μια δύσκολη ερώτηση..

    yep, I got it λίγο μετά που έκανα το post.

    thx, anyway για την βοήθεια. Ήταν σημαντική γιατί είχα κολλήσει λίγο...

    cheers!

Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems