public static int DragDropRowIndex(this System.Windows.Forms.DataGridView dgv, System.Windows.Forms.DragEventArgs e)
{
int r = 0;
System.Drawing.Point p = dgv.PointToClient(new System.Drawing.Point(e.X, e.Y));
r = dgv.HitTest(p.X, p.Y).RowIndex;
return r;
}
โค้ดบ้านๆ ประมาณนี้ครับครับ Code (C#)
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new frmDragNDrop_2() );
}
public static int DragDropRowIndex(this System.Windows.Forms.DataGridView dgv, System.Windows.Forms.DragEventArgs e)
{
int r = 0;
System.Drawing.Point p = dgv.PointToClient(new System.Drawing.Point(e.X, e.Y));
r = dgv.HitTest(p.X, p.Y).RowIndex;
return r;
}
}
Code (C#)
public partial class frmDragNDrop_2 : Form
{
public frmDragNDrop_2()
{
InitializeComponent();
this.dataGridView1.AllowDrop = true;
this.dataGridView2.AllowDrop = true;
}
private int rowIndexFromMouseDown;
private void frmDragNDrop_2_Load(object sender, EventArgs e)
{
for (int i = 0; i < 10; i++)
dataGridView1.Rows.Add("Test " + i, "Tor " + i);
}
private void dataGridView1_MouseDown(object sender, MouseEventArgs e)
{
dataGridView1.DoDragDrop(dataGridView1.SelectedRows, DragDropEffects.Copy);
}
private void listBox2_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
{
DataGridViewSelectedRowCollection rows = (DataGridViewSelectedRowCollection)e.Data.GetData(typeof(DataGridViewSelectedRowCollection));
foreach (DataGridViewRow row in rows)
{
try
{
listBox2.Items.Add(row.Cells[1].Value);
}
catch { }
}
}
private void listBox2_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(typeof(DataGridViewSelectedRowCollection)))
e.Effect = DragDropEffects.Copy;
}
private void dataGridView2_DragDrop(object sender, DragEventArgs e)
{
DataGridViewSelectedRowCollection rows = (DataGridViewSelectedRowCollection)e.Data.GetData(typeof(DataGridViewSelectedRowCollection));
rowIndexFromMouseDown = dataGridView2.DragDropRowIndex(e);
for (int i = rows.Count-1; i >=0 ; i--)
{
if (!string.IsNullOrEmpty("" + rows[i].Cells[0].Value))
dataGridView2.Rows.Add(rows[i].Cells[0].Value, rows[i].Cells[1].Value, rows[i].Cells[2].Value);
}
}
private void dataGridView2_DragEnter(object sender, DragEventArgs e)
{
Text = "dataGridView2_DragEnter";
if (e.Data.GetDataPresent(typeof(DataGridViewSelectedRowCollection))) e.Effect = DragDropEffects.Copy;
}
private void dataGridView2_DragOver(object sender, DragEventArgs e)
{
Text = "dataGridView2_DragOver";
if (e.Data.GetDataPresent(typeof(DataGridViewSelectedRowCollection))) e.Effect = DragDropEffects.Copy;
}
}
ต่อไปคือ
คลิก ลาก เพื่อเพิ่ม rows แบบ excel ครับ
ประมาณว่า W 0001 เป็นน้ำดื่ม รายการวิเคราะห์ Cadmium Iron Lead
W 0002 เป็นน้ำดื่ม รายการวิเคราะห์ Cadmium Iron Lead
อยากจะให้ User กรอกข้อมูล W 0001 แล้วก็ลากลงมา เป็น W 0002 ได้เลยครับ