01. april 2008 - 20:55Der er
14 kommentarer og 1 løsning
DataGridView - selected row
Jeg har en metode til at opdatere data i et DataGridView. Men jeg har problemer med at sætte en række til selected. Det har bare ingen effekt. Er der en event jeg skal vente på, før jeg sætter selektionen eller hvad?
this.dataGridView1.Rows.Clear();
for (int i = 0; i < 10; i++) this.dataGridView1.Rows.Add(i, "abc");
Synes overhovedet ikke, noget virker. Nu har jeg prøvet at sætte den selekterede række i databindingcomplete. Men den hopper tilbage til det indeks, der var valgt før databinding. Hvis jeg bruger en knap, kan jeg dog godt sætte indeks ved klik på denne.
Hvis jeg sætter en række messageboxes ind kan jeg se, at den nye række bliver valgt et kort øjeblik. Derefter flyttes selekteringen til den gamle række.
Lad os lige tage det fra starten I dit indledende spm. sætter du rækkerne ind manuelt, nu skriver du databinding??? Er der noget jeg har misforstået?
Dette virker
public partial class Form1 : Form { public Form1() { InitializeComponent(); dataGridView1.Tag = 2; AddRows();
}
public void AddRows() { List<Navne> ojbs = new List<Navne>(); ojbs.Add( new Navne( "Abe", "kat" ) ); ojbs.Add( new Navne( "Anders", "And" ) ); ojbs.Add( new Navne( "Fætter", "Højben" ) ); ojbs.Add( new Navne( "C#", "Styrer" ) ); dataGridView1.DataSource = ojbs; dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect; dataGridView1.CurrentCell = dataGridView1.Rows[(int)dataGridView1.Tag].Cells[0]; } }
public class Navne { public Navne(string fn, string en) { _forNavn = fn; _efterNavn = en; }
private string _forNavn;
public string ForNavn { get { return _forNavn; } set { _forNavn = value; } } private string _efterNavn;
public string EfterNavn { get { return _efterNavn; } set { _efterNavn = value; } } } Hvis du vi beholde selektion efter at have cleared og indsat nye rows skal du måske bruge dette
Undskyld forvirringen. Til at starte med databindede jeg ikke, men nu prøvede jeg at gøre det, for at se om det hjalp på noget.
I dit eksempel vil jeg så have en metode der ændrer et navn, sorterer listen alfabetisk og binder igen. Det betyder, at jeg ikke kan flytte selektionen hen på den nye række.
Mit virker også, når formen bliver initialiseret, men ikke når en sådan update-metode kaldes.
Men som sagt - hvis jeg lægger koden til at selektere bag en knap, virker det fint, når jeg trykker på knappen, så er som om, at jeg prøver at selektere for tidligt, efter der er databinded.
Jeg har fundet ud af det. Det er fordi, at update-metoden bliver kaldt fra et modal-vindue, og så skal jeg bruge BeginInvoke fra modal-vinduet for at kalde metoden til sidst.
(BindingContext[dataGridView1.DataSource] as CurrencyManager).Refresh();
vil alle ændringer i din datakilde bliver opdateret i det grid
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.