C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 165 を表示中)
■95131 / )  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) 現在選択されている行(通常、青色などの選択色にて描画される)
にて代用できるかも知れません。やりたい内容にもよりますが。
返信 編集キー/


管理者用

- Child Tree -