web-dev-qa-db-ja.com

datagridviewのすべての行を選択解除します

2つのデータグリッドビューがあり、そのうちの1つをクリックすると、2番目のデータグリッドビューですべての選択を解除したいのですが、これを試しましたが、何も機能しません:

firstItemsDataGridView.ClearSelection();
firstItemsDataGridView.CurrentCell = null;

動作していない、

firstItemsDataGridView.ClearSelection();
if (firstItemsDataGridView.Rows.Count > 0)
    firstItemsDataGridView[1, 0].Selected = true;
firstItemsDataGridView.CurrentCell = null;
firstItemsDataGridView.ClearSelection();
foreach (DataGridViewRow item in firstItemsDataGridView.Rows) {
    item.Selected = false;

    foreach (DataGridViewCell itemCell in firstItemsDataGridView.Columns) {
        itemCell.Selected = false;
    }
}

動作していない、

firstItemsDataGridView.Rows[0,-1].Selected = true;

あまり機能していません。

選択モードを全行選択に設定しましたが、目標を達成する方法がわかりません。
どうもありがとう!

20
Martin Ch
dataGridView1.ClearSelection();

動作するはずです。トリガーされた行を自動的に選択するコードがありますか?

53
Mitzi

回答がなく、他の投稿でこの回答を使用したため、最初の行が選択され、選択解除ができないという同じ問題に遭遇しました。

Color blue  = ColorTranslator.FromHtml("#CCFFFF");
Color red = ColorTranslator.FromHtml("#FFCCFF");
Color letters = Color.Black;

foreach (DataGridViewRow r in datagridIncome.Rows)
{
    if (r.Cells[5].Value.ToString().Contains("1")) { 
        r.DefaultCellStyle.BackColor = blue;
        r.DefaultCellStyle.SelectionBackColor = blue;
        r.DefaultCellStyle.SelectionForeColor = letters;
    }
    else { 
        r.DefaultCellStyle.BackColor = red;
        r.DefaultCellStyle.SelectionBackColor = red;
        r.DefaultCellStyle.SelectionForeColor = letters;
    }
}

これは小さなトリックです。行を選択する唯一の方法は、最初の列(column [0]ではなく、そのため)です。別の行をクリックすると、青色の選択は表示されなくなり、矢印のみが選択された行を示します。

ソリューション:

最初の行がデフォルトで選択された理由と、デフォルトで選択しない方法を見つけました。

デフォルトでは、私のdatagridviewは、Windowsフォームで最初のタブストップを持つオブジェクトでした。別のオブジェクトで最初にタブストップを作成する(おそらくデータグリッドのタブストップを無効にするとうまくいくかもしれません)最初の行の選択を無効にします

4
Mario

NullSkullでの答えは、datagridviewコントロールの行0、列0のセルがフォームのロード時に常に選択され、フォームのコンストラクターメソッド内でClearSelectionを呼び出しても選択解除できないという問題を解決しました。 Form_LoadイベントでClearSelectionを呼び出す必要がありました。 http://www.nullskull.com/q/10066166/how-to-deselect-the-first-row-when-the-form-i-loaded-in-datagridview-in-windows-application。 aspx

3
voidmain

ただ使用する:

dgvName.ClearSelection();

1
Ahmed Elzeiny

すべての行が選択解除されていることを確認します(dataGridView.Rows [...]。Selected = false)

行0のデフォルトは選択されているため、DataGridViewを開くときにdataGridView.Rows [0] .Selected = falseを設定します。他のオプションが設定されている限り、ユーザーは何も選択できません。

0
Klinkenbecker

WPFを使用してMVVMデザインパターンを維持する場合は、選択した両方のアイテムを同じプロパティにバインドして、一方を選択すると他方が自動的に選択解除されるようにすることができます。

このようなものを試してください

public class SingletonClass
{
    private static SingletonClass _Instance;
    public static SingletonClass Instance
    {
        get
        {
            if (_Instance == null)
                _Instance = new SingletonClass();
            return _Instance;
        }
    }   // End Property Instance

    private object _SelectedItem;
    public object SelectedItem
    {
        get { return _SelectedItem; }
        set { _SelectedItem = value; }
    } // End Selected Item
 }

<DataGrid Name="Datagrid1" SelectedItem="{Binding Source={x:Static Const:SingletonClass.Instance},Path=SelectedItem,IsAsync=True}">

<DataGrid Name="Datagrid2" SelectedItem="{Binding Source={x:Static Const:SingletonClass.Instance},Path=SelectedItem,IsAsync=True}">

*これは異なるインスタンスの異なるビューで機能するため、シングルトンクラスのみを使用しました。同じビューで使用する場合は通常のクラスを使用できます。

XmalでIsAsync = Trueに注意してください。異なるビューでシングルトンクラスを使用する場合は、それなしでは機能しません。

0
Bruno Khoury

私はこれを試してみましたが、それは私のために働いています:

for (int i = 0; i < dataGridView1.Rows.Count;i++)
{
  dataGridView1.Rows[i].Selected = false;
}
0
// no selection in dgv at the begening   
dgv.FirstDisplayedCell = null;
dgv.ClearSelection();
// try this it is working !
0
AbuDawood