/ Prevrátenie DataGridView z výberu prvej položky - .net, winforms, datagridview

Zabránenie výberu prvej položky DataGridView - .net, winforms, datagridview

Mám WinForm DataGridView, že keď somzačiarknutie údajov s prvou položkou je predvolene vybratá. Nechcem, aby sa to stalo, keď sa vybrala položka, ktorá sa spustí a niektorý kód sa spustí. Riešenia, ktoré mám na to, je unhook-bind-rehook udalosť alebo mať príznak, ktorý sa po prvýkrát zmenil požiar po novom databind.Ale som premýšľal, či je niečo trochu elegantnejšie.

odpovede:

2 pre odpoveď č. 1

Nemám otvorenú aplikáciu na testovanie, ale som zvedavý, či máte medzi svojimi údajmi a datagridview intervenčný zdroj BindingSource? Ak áno, čo keď nastavíte

List<Data> data = GetMyData();
BindingSource myBindingSource = new BindingSource();
myBindingSource.DataSource = data;
myBindingSource.position = -1;
myGrid.DataSource = myBindingSource;

Často považujem za užitočné zasiahnuť aBindingSource objekt medzi údajmi a používateľským rozhraním. Zdá sa, že pomáha opraviť veľa náhodných problémov, aj keď som viac zvyknutý používať objekty DataTable ako dáta, namiesto objektov List <>.


2 pre odpoveď č. 2

A čo (prepáč, VB.NET, ale som si istý, že by ste mohli konvertovať):

myGrid.ClearSelection()

2 pre odpoveď č. 3

Mala som podobný problém (ale nepoužívam udalosť SelectionChanged) a toto funguje pre mňa:

V konštruktore po nastavení väzby pridajte handler k udalosti DataBindingComplete:

dgvCommandos.DataSource = systeemCommandos; // = my List<> of objects
dgvCommandos.DataBindingComplete += new DataGridViewBindingCompleteEventHandler(dgvCommandos_DataBindingComplete);

Spracovateľ:

void dgvCommandos_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
dgvCommandos.ClearSelection();
}

Ak máte v úmysle vybrať riadok (napríklad po pridaní / vložení nového objektu), jednoducho nastavte:

dgvCommandos.Rows[insertPos].Selected = true;

Z tohto dôvodu sa domnievam, že je možné zvládnuť ďalšie udalosti, ktoré by reagovali na výber používateľa. Dúfam, že to pomôže.


0 pre odpoveď č. 4

Použite niečo ako nasledujúci príklad:

        dataGridView.Columns[0].Selected = false;
dataGridView.Rows[0].Selected = false;
dataGridView.Rows[0].Cells[0].Selected = false;

Samozrejme skontrolujte, či sú riadky, stĺpce atď. Je to len príklad.


0 pre odpoveď č. 5

Docela neskoro, ale jediný som spôsob, ako som pracoval pre mňa (veľa TextBoxes, ComboBoxes atď viazaný na môj DataGridView cez BindingSource):

Po inicializácii dátových väzieb na moje ovládacie prvky a načítaní dát do DataGridView som musel pozastaviť viazanie

bindingSource.SuspendBinding();

V mojej RowHeaderMouseClick udalosti som skontroloval, či je väzba pozastavená. Ak áno, jednoducho to obnovte:

if(bindingSource.IsBindingSuspended)
bindingSource.ResumeBinding();

Týmto spôsobom môžem dokončiť načítanie a viazanie dát (v mojom prípade BindingList), ukázať dáta užívateľovi, ale bez výberu záznamu.

Dúfam, že to pomôže aspoň komukoľvek!