■95131 / inTopicNo.4) |
Re[1]: visualStudio datagridview 昇順降順 |
□投稿者/ 魔界の仮面弁士 (2760回)-(2020/06/24(Wed) 21:49:12)
|
■No95127 (ポテトサラダ爆発 さん) に返信 > どのような処理またはプロパティ等の設定で、選択されているセルの行が、 > 昇順降順によって動くのでしょうか。
ごめんなさい。質問の意味が読み取れなかったです。
とりあえず下記を実行すると、 ・ランダムな値がセットされた DataGridView が表示される。 ・フォームを起動した時点で、[元の3行目]〜[元の5行目]および[元の11行目]が、行全体が選択された状態になっている。 ・また、[元の8行目] とある行は選択されていないが、その左に、現在行を表す三角マークが出ている。 という状態になります。
この状態で後続の列ヘッダーをクリックすると、並び替えが行われますが、 並び替え後も、現在行は[元の8行目]と表示されている行のままですし、 選択されている行も[元の3行目]〜[元の5行目]および[元の11行目]のままでした。
この状態が都合が悪い…ということなのでしょうか?
// 空のフォームで実験 private void Form1_Load(object sender, EventArgs e) { DataGridView dgv = new DataGridView(); dgv.Dock = DockStyle.Fill; dgv.SelectionMode = DataGridViewSelectionMode.FullRowSelect; dgv.MultiSelect = true; Controls.Add(dgv);
// 実験用のダミーデータ dgv.AllowUserToAddRows = false; dgv.RowCount = 30; dgv.ColumnCount = 10; Random rnd = new Random(); for (int r = 0; r < 30; r++) { dgv[0,r].Value = "元の" + r + "行目"; for (int c = 1; c < 10; c++) { dgv[c, r].Value = rnd.Next(1000, 9999); } }
// 8行目の先頭列をカレントセルにするが、選択状態にはしない (dgv.CurrentCell = dgv[0, 8]).Selected = false;
// 代わりに、3, 4, 5, 11 行目を選択しておく dgv.Rows[3].Selected = true; dgv.Rows[4].Selected = true; dgv.Rows[5].Selected = true; dgv.Rows[11].Selected = true;
// この状態で列ヘッダーをクリックしてみよう }
> datagridviewコントロールでセル選択を行単位のみで行うよう設定してるのですが、 SelectionMode = FullRowSelect のことですね。
その DataGridView では、データバインドを用いていますか?
もし DataGridView の DataSource にバインドしているとして、かつ、そのデータが ソート非対応なデータをバインドしている場合は、並び替えのために追加の手間がかかりますが、 そういう状況ではないのですよね。
> その際にdatagridviewの機能で昇順降順があるのですが、 「昇順降順がある」というのは ユーザーが列ヘッダーをクリックしてソートする機能のことで良いですか? (その列の SortMode が Automatic に設定されている必要があります)
それとも、DataGridView の Sort メソッドの事でしょうか? あるいは、バインドしている DataSource を、自身で昇順降順に並び替えてセットしている、という話でしょうか?
> 選択している行が昇順降順されているのにフォーカス?が移動されません。
ひとまず、フォーカスの後ろの「?」が気にかかりますが…。
質問頂いた説明を呼んでも、どういう状況なのか分かりませんでした。 もう少し具体的に説明して頂けると有難いです。
とりあえず、非編集状態のセルで Tab キーを押すと、そのセルが破線で囲まれた状態で 表示されると思いますが、これが DataGridView における「フォーカス」となります。
もしもフォーカスの破線を表示したくない場合には、下記のようにします。 https://dobon.net/vb/dotnet/datagridview/noforusframe.html
DataGridView において、フォーカスは一つのセルだけに割り当たる物であり、 行全体に対するフォーカスにはなりません。(独自描画をしてそれっぽく見せることはできますが)
ひとまず、行単位の「フォーカス」の代わりに、 (1) 現在カーソルがある行(行ヘッダに右向き三角が付いている行) (2) 現在選択されている行(通常、青色などの選択色にて描画される) にて代用できるかも知れません。やりたい内容にもよりますが。
|
|