DataGrid控件默认情况下就是支持多行选择的,但需要按Ctrl键进行多行选择。通过声明三个Event Handlers我们可以不按Ctrl直接进行选择。依次加入
相关事件,同时创建一个arraylist来存储哪几列被选中就行了,因为有时候用户会在选择中考虑,可能点了又点,点选成高亮的最后不一定是被选中的行。主要代码如下:
1
ArrayList ArrayListSelectedRow = new ArrayList();
2
private void DataGrid1_CurrentCellChanged(object sender, EventArgs e)
3
{
4
int cri = DataGrid1.CurrentRowIndex;
5
DataGrid1.Select(cri);
6
Console.WriteLine("In Cell Changed");
7
DataGrid1_Click( sender, e);
8
}
9
private void DataGrid1_Click(object sender, EventArgs e)
10
{
11
int cri = DataGrid1.CurrentRowIndex;
12
DataGrid1.Select(cri);
13
Console.WriteLine("In Click");
14
}
15
private void DataGrid1_MouseUp(object sender, MouseEventArgs e)
16
{
17
int cri = DataGrid1.CurrentRowIndex;
18
if(ArrayListSelectedRow.Contains(cri))
19
{
20
DataGrid1.UnSelect(cri);
21
ArrayListSelectedRow.Remove(cri);
22
}
23
else
24
{
25
DataGrid1.Select(cri);
26
27
ArrayListSelectedRow.Add(cri);
28
}
29
for (int i = 0; i < ArrayListSelectedRow.Count; i++)
30
{
31
DataGrid1.Select(int.Parse(ArrayListSelectedRow [i].ToString()));
32
}
33
Console.WriteLine("In Mouse Up");
34
}
35

2

3



4

5

6

7

8

9

10



11

12

13

14

15

16



17

18

19



20

21

22

23

24



25

26

27

28

29

30



31

32

33

34

35

总的来说,这样可以实现要求但是比较麻烦,如果大家有更好的办法,请留言告知我。