το 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()+":"+
dr
![Idea [I]](/cs/emoticons/emotion-55.gif)
.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. ;-)
Οποιαδήποτε βοήθεια ευπρόσδεκτη.