日期:2014-05-20 浏览次数:20951 次
//下面的代码 左键点击增加选择 右键取消选择,不知道有没有更好的办法
private List<int> selectedRowsIndex = new List<int>();//用来存放选中的index
        delegate void SetSelectState(bool deSelect, int rowIndex);
        void RefreshTheSelectedStates(bool deSelect, int rowIndex)
        {
            try
            {
                foreach (int idx in selectedRowsIndex)
                {
                    dataGridView2.Rows[idx].Selected = true;
                }
                if (deSelect)
                {
                    dataGridView2.Rows[rowIndex].Selected = false;
                }
            }
            finally
            {
                dataGridView1.Refresh();
            }
        }
        private void dataGridView2_MouseDown(object sender, MouseEventArgs e)
        {
            DataGridView.HitTestInfo testInfo = dataGridView2.HitTest(e.X, e.Y);
            int rowIdx = testInfo.RowIndex;
            switch(e.Button)
            {
                case MouseButtons.Left:
                    if (rowIdx >= 0)
                    {
                        if (!selectedRowsIndex.Contains(rowIdx))
                            selectedRowsIndex.Add(rowIdx);
                        dataGridView2.BeginInvoke(new SetSelectState(RefreshTheSelectedStates), false, 0);
                    }
                    break;
                case MouseButtons.Right:
                    if (rowIdx >= 0)
                    {
                        if (selectedRowsIndex.Contains(rowIdx))
                            selectedRowsIndex.Remove(rowIdx);
                        dataGridView2.BeginInvoke(new SetSelectState(RefreshTheSelectedStates), true, rowIdx);
                    }
                    break;
            }
        }
------解决方案--------------------