Bonjour, voici mon problème:
Dans mon form, j'ai une DataGridview qui est liée à une DataTable en local par BindingSource. Cette table se remplit en allant lire un bloc de données dans un fichier binaire.
Ce que je veux faire, c'est recharger ma DataTable en allant lire dans le fichier source lorsque je scrolle sur ma DataGridView.
Plus précisément, afin de laisser la liberté de scroller vers le haut, je veux charger dans la DataTable les lignes de n à m et afficher dans la DataGridView les lignes de n+10 à n+10+size_window en utilisant (du moins, c'est mon idée) la propriété FirstDisplayedScrollingIndex = n+10
Voici ma tentative:
first_displayed est l'index absolu(pour l'ensemble des données) de la première ligne dans la GridView avant l'évenement.
blockIndex et le `n`dont je parlais, la première ligne du bloc source à charger dans la Table.
Résultat, ma Table se recharge bien mais elle n'est pas lue dans le GridView. J'ai une exception System.ArgumentOutOfRangeException qui semble indiquer un problème d'index. Est-ce que j'utilise FirstDisplayedScrollingRowIndex de la mauvaise manière?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 private void maGridView_Scroll(object sender, ScrollEventArgs e) { if (e.ScrollOrientation == ScrollOrientation.VerticalScroll) { int y = maGridView.FirstDisplayedScrollingRowIndex; if (first_displayed <= 10) // condition aux limites { first_displayed = y; if (y <= 10) { blockIndex = 0; } else { blockIndex = (uint) (first_displayed-10); } } else { first_displayed += (y - 10); if (first_displayed <= 10) { blockIndex = 0; } else { blockIndex = (uint)(first_displayed - 10); } } LoadTable(file, (blockIndex)); maGridView.Refresh(); if (first_displayed > 10) { maGridView.FirstDisplayedScrollingRowIndex = 10; } else { maGridView.FirstDisplayedScrollingRowIndex = first_displayed; } }
Après avoir rechargé ma DataTable la propriété FirstDisplayedScrollingRowIndex se voit assigner une valeur de -1 le Refresh() ne fonctionne pas. Si j'essaie de placer mon Refresh() après l'assignation de FirstDisplayedScrollingRowIndex, c'est cette assignation qui me renvoie l'exception.
Lorsque je reloade ma DataTable, je la nettoie et la reremplie, le binding support-t-il une telle opération? ou dois-je recréer le lien entre la DataGridView et la DataTable. Auquel cas, le BindingSource perd grandement de son intérêt.
Partager