如何同时选择DataGrid的多行

       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

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

 

posted on 2005-12-12 16:48 Zeus 阅读(1477) 评论(5)  编辑 收藏 所属分类: CSDN释疑

评论

#1楼 2005-12-12 17:21 地方[未注册用户]

ArrayList 当然可以处理
为什么不用发选呢!
  回复  引用    

#2楼 2005-12-13 15:06 小白鼠[未注册用户]

啊!?这么麻烦,幸亏我换到2.0了。   回复  引用    

#3楼 2005-12-13 23:08 -Zeus-

You cannot multiselection without Ctrl in ASP.NET2.0.
There will be the same way:)
  回复  引用    

#4楼 2006-07-17 14:36 llano[未注册用户]

Hashtable myht=new Hashtable();

private void dataGrid1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
DataGrid myGrid = (DataGrid) sender;
System.Windows.Forms.DataGrid.HitTestInfo hti;
hti = myGrid.HitTest(e.X, e.Y);
string message = "You clicked ";

switch (hti.Type)
{
case System.Windows.Forms.DataGrid.HitTestType.RowHeader :
message += "the row header for row " + hti.Row;

try
{
myht.Add(dataGrid1.CurrentCell.RowNumber,dataSet11.Tables[0].Rows[dataGrid1.CurrentCell.RowNumber ][1]);
}
catch
{
//如果再次选中,则表示取消。
myht.Remove(hti.Row);
}
break;
}
  回复  引用    

#5楼 2006-07-17 14:38 llano[未注册用户]

哦,上面的
dataGrid1.CurrentCell.RowNumber
应改成hti.Row
  回复  引用    




发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 295654




相关文章:

相关链接:

导航

公告

  •  CSDN :清柳(zeusvenus)

  •  有话说?给我一个Mail

  •  帖子以现状提供,欢迎转载:)

  •  您可以通过狗狗订阅本Blog

  •  The posts are made "AS IS" without warrnties and confers no rights.

  • <2005年12月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    统计

    与我联系

    搜索

     

    常用链接

    留言簿

    我参与的团队

    随笔分类(18)

    随笔档案(131)

    文章分类(7)

    新闻分类

    相册

    我参与的团队

    最新评论

    阅读排行榜

    评论排行榜