- PR -

[WinApp C#]DataGridでの複数選択

1
投稿者投稿内容
NORIX
常連さん
会議室デビュー日: 2004/08/31
投稿数: 30
投稿日時: 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);
}
}
}
}


NORIX
常連さん
会議室デビュー日: 2004/08/31
投稿数: 30
投稿日時: 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

スキルアップ/キャリアアップ(JOB@IT)