1

datagridviewがあります。そのmultiselectプロパティはtrueに設定されています。このdatagridviewは、特定の間隔時間、たとえば1秒または2秒で行を更新します。

したがって、行を選択してからShiftキーを押しながら別の行を選択すると、これら2つの間の行全体が問題なく選択されます。

行を選択し、その後グリッドビューが更新され、Shiftキーを押しながら別の行を選択しようとすると、行全体が選択されず、最後にクリックされた行が選択されたとします。

なぜそれが起こっているのかわからないので、グリッドの2行目を選択して更新すると、この行が5行目と同じように下に移動し、その後、Shiftキーを押しながら別の行を選択しようとします。このエラーが発生しています。

誰でもこの問題についてあなたの提案をしてください。

更新後の選択のためのコード

for (int nRow = 0; nRow < Grid.Rows.Count; nRow++)
{
  foreach (string cookieIdval in SelectedCookies)
  {
     if (Grid.Rows[nRow].Cells[ColCookieID].Value.ToString() == cookieIdval.ToString())
     {
       Grid.Rows[nRow].Cells[ColCookieID].Selected = true;
       break;
     }
  }
}
4

3 に答える 3

1

このようなユーザーの相互作用が終了するまで更新を延期することはできませんか?

于 2013-01-31T11:07:19.780 に答える
0

更新前に選択されたものを再設定するように、更新方法を変更します。用途DataGridViewRow.SelectedDataGridView.CurrentRowプロパティ。

これを行う方法は、DataGridViewがどのように設定されているかによって異なります。

編集:

行を区別するための鍵はColCookieID列にあるようです。これを使用して、選択した行を保存および回復できます。

public void UpdateGridView()
{
    HashSet<string> selectedRows = new HashSet<string>();
    foreach (DataGridViewRow row in grid.Rows)
    {
        if (row.Selected)
            selectedRows.Add(row.Cells[ColCookieID].Value.ToString());
    }
    var currentRow = grid.CurrentRow.Cells[ColCookieID].Value.ToString()

    // ... update the grid

    foreach (DataGridViewRow row in grid.Rows)
    {
        var id = row.Cells[ColCookieID].Value.ToString();
        if (selectedRows.Contains(id))
            row.Selected = true;
        if (currentRow == id)
            grid.CurrentCell = row.Cells[0];
    }
}

動作するかどうか教えてください。

于 2013-01-31T11:15:34.737 に答える
0

実際の問題に対処するために(リフレッシュ後の複数選択ではShiftキーが機能しない)-これは設定することで修正されます

dataGridView.CurrentCell = ...

(CurrentCellの設定は受け入れられた回答に含まれていますが、この特定の問題については言及されていません)

于 2015-10-13T04:31:42.540 に答える