- - PR -
[WinApp C#]DataGridでの複数選択
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-04-12 18:32
お世話になってます。
.net(WinApp C#)で開発を行っています。 DataGridを使って行単位に項目選択(複数)できる以下のような表形式の選択リストを作成しています。 ・行ヘッダーは非表示にしていて、セル部分をクリックして行選択を行いたい。 ・選択方法もShift、Ctrlを使わずに、シングルクリックで選択・非選択を切り替えたい。 この状態で複数選択を可能にするには、変数に各行の選択状態を保持しておいて、選択される(MouseUpイベント)たびに選択セットしなおす、というやり方しかないのかなと思ってやってみたのですが、ものすごいチラツキで外には出せないかんじで、、、。 同様のことができればDataGridにはこだわりません。 よい方法をご存知の方、教えてください!!! よろしくお願いいたします。 *********** //選択状態格納変数 bool rowstatus = new bool[dt.Rows.Count]; for(int i = 0; i<rowstatus.Length; i++) { rowstatus[i] = false; } //行選択時イベント privatevoidComDataGrid_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e) { if(ComDataGrid.CurrentRowIndex>-1)//カレント行が存在する場合 { rowstatus[ComDataGrid.CurrentCell.RowNumber]=!rowstatus[ComDataGrid.CurrentCell.RowNumber]; for(inti=0;i<rowstatus.Length;i++) { if(rowstatus[i]) { ComDataGrid.Select(i); } else { ComDataGrid.UnSelect(i); } } } } |
|
投稿日時: 2005-04-13 10:43
ちょっと無理やりっぽいのですが、自己解決しました。
クリックフラグ変数を用意して、MouseDownイベントでフラグを立て、paintイベントで行選択をする形にしました。 やり方的にどうなんだろう、とも思いますが。 他にもっといい方法があれば教えてください。 ******** //行クリック時 privatevoidComDataGrid_MouseDown(objectsender,System.Windows.Forms.MouseEventArgse) { clickFlg=true; } ///行選択 privatevoidComDataGrid_Paint(objectsender,System.Windows.Forms.PaintEventArgse) { if(clickFlg==false)return; //カレント行が存在する場合 if(ComDataGrid.CurrentRowIndex>-1) { //ComDataGrid.Select(ComDataGrid.CurrentCell.RowNumber); rowstatus[ComDataGrid.CurrentCell.RowNumber]=!rowstatus[ComDataGrid.CurrentCell.RowNumber]; for(inti=0;i<rowstatus.Length;i++) { if(rowstatus[i]) { ComDataGrid.Select(i); } else { ComDataGrid.UnSelect(i); } } } clickFlg=false; } |
1