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