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ď č. 1Nemá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!