zoukankan      html  css  js  c++  java
  • 两个表结构相同的datagridview间的整行拖动(转载)

    转自http://hi.baidu.com/zouqiner/blog/item/3890f363d0e37ad5e6113a56.html

        注意里面所有的事件都是两个datagridview都需要挂上~才能实现拖动,转载请注明

          欢迎更多热爱.net 的朋友一起探讨研究。

    界面样式:

    源码:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;

    namespace WindowsApplication1
    {
        public partial class Form3 : Form
        {
            public Form3()
            {
                InitializeComponent();
            }

            private int selectionIdx = 0;

            private void Form3_Load(object sender, EventArgs e)
            {
                DataSet ds = new DataSet();
                ds.Tables.Add("table1");
                ds.Tables[0].Columns.Add("code");
                ds.Tables[0].Columns.Add("desc");
                ds.Tables[0].Rows.Add(new object[] { "1", "aaa" });
                ds.Tables[0].Rows.Add(new object[] { "2", "bbb" });

                DataSet ds2 = new DataSet();
                ds2.Tables.Add("table1");
                ds2.Tables[0].Columns.Add("code");
                ds2.Tables[0].Columns.Add("desc");
                ds2.Tables[0].Rows.Add(new object[] { "3", "ccc" });
                ds2.Tables[0].Rows.Add(new object[] { "4", "ddd" });

                dataGridView1.DataSource = ds.Tables[0];
                dataGridView2.DataSource = ds2.Tables[0];
            }

            DataRow dr = null;
            DataGridViewRow dgvr = null;

            private void dataGridView1_DragDrop(object sender, DragEventArgs e)
            {
                try
                {
                    if (dr != null)
                    {
                        DataGridView dgv = sender as DataGridView;
                        string strTemp = dgv.Name;
                        int idx = GetRowFromPoint(e.X, e.Y, dgv);
                        if (idx < 0)
                            idx = dgv.Rows.Count;
                        if (e.Data.GetDataPresent(typeof(DataGridViewRow)))
                        {
                            ((DataTable)dgv.DataSource).Rows.InsertAt(dr, idx);
                            selectionIdx = idx;
                        }
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
            private void dataGridView1_DragOver(object sender, DragEventArgs e)
            {
                try
                {
                    DataGridView dgv = sender as DataGridView;
                    string strTemp = dgv.Name;

                    dgvr = (DataGridViewRow)e.Data.GetData(typeof(DataGridViewRow));

                    dr = ((DataTable)dgv.DataSource).NewRow();
                    for (int i = 0; i < dgvr.Cells.Count; i++)
                    {
                        dr[i] = dgvr.Cells[i].Value;
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }

            }

            private void dataGridView1_CellMouseDown(object sender, DataGridViewCellMouseEventArgs e)
            {
                try
                {

                    if (e.RowIndex > 0)
                        selectionIdx = e.RowIndex;
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }

            }

            private int GetRowFromPoint(int x, int y,DataGridView dgv)
            {

                for (int i = 0; i < dgv.RowCount; i++)
                {
                    Rectangle rec = dgv.GetRowDisplayRectangle(i, false);

                    if (dgv.RectangleToScreen(rec).Contains(x, y))
                        return i;
                }

                return -1;
            }

            private void dataGridView1_SelectionChanged(object sender, EventArgs e)
            {
                try
                {
                    DataGridView dgv = sender as DataGridView;
                    if ((dgv.Rows.Count > 0) && (dgv.SelectedRows.Count > 0))
                    {

                        if (dgv.Rows.Count <= selectionIdx)
                            selectionIdx = dgv.Rows.Count - 1;
                        dgv.Rows[selectionIdx].Selected = true;
                        dgv.CurrentCell = dgv.Rows[selectionIdx].Cells[0];
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }

            private void dataGridView1_DragEnter(object sender, DragEventArgs e)
            {
                e.Effect = DragDropEffects.Move;
            }

            private void dataGridView1_CellMouseMove(object sender, DataGridViewCellMouseEventArgs e)
            {
                try
                {
                    DataGridView dgv = sender as DataGridView;
                    string strTemp = dgv.Name;
                    if ((e.Clicks < 2) && (e.Button == MouseButtons.Left))
                    {
                        if ((e.ColumnIndex == -1) && (e.RowIndex > -1))
                        {

                            DragDropEffects dd = dgv.DoDragDrop(dgv.Rows[e.RowIndex], DragDropEffects.Move);

                            if (dd == DragDropEffects.Move && dgvr != null)
                            {
                                dgv.Rows.Remove(dgvr);
                                dgvr = null;
                                dr = null;
                            }

                        }
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }

        }
    }

  • 相关阅读:
    osharp3引入事务后操作结果类别的调整
    Code First 迁移
    表达式拼接Expression<Func<IEntityMapper, bool>> predicate
    ASP.NET中Session的sessionState 4种mode模式
    EF Code First Migrations数据库迁移
    啊里大鱼短信发送API
    asp.net服务器控件的生命周期
    osharp3使用经验:整合DbContextScope 文章 1
    关于MarshalByRefObject的解释
    数据库操作事务IsolationLevel 枚举
  • 原文地址:https://www.cnblogs.com/Mblog/p/1639637.html
Copyright © 2011-2022 走看看