C# Devexpress dwie kontrolki GridControl ukrywanie/usuwanie wierszy w drugiej kontrolce na podstawie wierszy z pierwszej kontrolki

0

Witam,

Mam dwie kontrolki GridControl oraz przycisk Button1. Kontrolka GridControl1 jako dane ma wczytywane wiersze z bazy MSSQL (pozycje dokumentu), zaś druga kontrolka GridControl2 pojawia się w nowym oknie po wciśnięciu przycisku Button1 (w kontrolce GridControl2 wyświetlane są wiersze, które po wybraniu i zatwierdzeniu przyciskiem wskakują jako pozycje do kontrolki GridControl1). Chciałbym osiągnąć, żeby nie były wyświetlane wiersze w GridControl2, które znajdują się już w GridControl1 - albo je ukrywać albo usuwać z widoku GridView, bo w bazie będą zawsze np. na podstawie kolumny ID, że jeśli w GridControl1 jest wiersz o ID=1 to w GridControl2 usuń taki wiersz podczas ładowania danych do kontrolki. Dane są ładowane przy pomocy EntityFramework. Pomoże ktoś osiągnąć zamierzony cel ???

0

Hmm 🤔 GridControl2.DataSource = null?

0

W GridControl1 mamy wiersz o ID=1 oraz wiersz o ID=2, zaś w GridControl2 mamy 20 wierszy o ID=1 do ID=20, czyli przy ładowaniu danych do GridControl2 chcę wiersze o ID=1 oraz ID=2 albo ukryć albo usunąć z widoku GridView2 reszta wierszy o ID=3 do ID=20 ma być widoczna w GridView2

0

Jeśli dostajesz z EF jakąś listę lub enumerable, które później podpinasz pod datasource konkretnego grida, to przed podłączeniem pod GridView2 zrób
var lista3 = lista2.Except(list1).ToList(); i do GridView2 podepnij lista3.

#EDIT
List.except on custom class

0

Tak, oba gridy mają DataSource z BindingList

0
public void PobierzDane()
        {
            if (frmForm1.Instancja.myGridView1.RowCount > 0)
            {
                var lista3 = _lista2.Except(frmForm1.Instancja._SelectedList).ToList();
                myGridControl2.DataSource = lista3;
            }
            else
            {
                myGridControl2.DataSource = _lista2;
            }
        }

_SelectedList to lista z danymi GridView1 z okna frmForm1
_lista2 to lista z drugiego okna z GridView2

0
pawelus222 napisał(a):
public void PobierzDane()
        {
            if (frmForm1.Instancja.myGridView1.RowCount > 0)
            {
                var lista3 = _lista2.Except(frmForm1.Instancja._SelectedList).ToList();
                myGridControl2.DataSource = lista3;
            }
            else
            {
                myGridControl2.DataSource = _lista2;
            }
        }

_SelectedList to lista z danymi GridView1 z okna frmForm1
_lista2 to lista z drugiego okna z GridView2

List<ListaModel> lista = _lista2.Where(x => frmForm1.Instancja._SelectedList.Contains(x.ID)).ToList();

zwracany jest błąd

ListaModel wygląda następująco:

public class ListaModel
    {
        public decimal ID { get; set; }
        public bool Wybierz { get; set; }
        public string NUMER { get; set; }
        public string DATA { get; set; }
        public string DATA_WYST { get; set; }
        public int ILOSC { get; set; }
        public decimal WARTOSC_BRUTTO { get; set; }
        public decimal POZ { get; set; }
        public decimal WARTOSC_WALUTA { get; set; }
        public decimal P_WALUTA { get; set; }
    }
0
List<ListaModel> lista = _lista2.Where(x => frmForm1.Instancja._SelectedList.Select(y=>y.ID).Contains(x.ID)).ToList();
0
AdamWox napisał(a):
List<ListaModel> lista = _lista2.Where(x => frmForm1.Instancja._SelectedList.Select(y=>y.ID).Contains(x.ID)).ToList();

Niestety, daje to taki sam wynik jak:

var lista3 = _lista2.Except(frmForm1.Instancja._SelectedList).ToList()

czyli jeśli GridView1 mam dwa wiersze z danymi to GridView2 ma też te same dwa wiersze zamiast 18 wierszy z 20 (dwa z pierwszego GridView mają być niewidoczne)

0

A to nie znaczy, przypadkiem, że powinno być odwrotnie?

List<ListaModel> lista = frmForm1.Instancja._SelectedList.Where(x => _lista2.Select(y=>y.ID).Contains(x.ID)).ToList();

PS.
Masz te zmienne tak ponazywane, że aż mnie boli wszystko umysłowo i fizycznie.

  1. _lista2
  2. frmForm1 oraz Instancja (nie wiadomo czego)
  3. "prywatne" property _SelectedList, do którego odwołujesz się "publicznie".
  4. klasa ListaModel - czego to jest model, listy, czy elementu listy?
  5. pola w klasie ListaModel z dużych liter?! To jest jakiś Firebird?
  6. pole bool Wybierz służy do? Coś czuje, że tego nie ma w bazie.
  7. pole ID jako decimal? Masz zamiar mieć ID = 1.42?

Długa droga przed tobą kolego, ale się nie łam, każdy kiedyś zaczynał. Zwyczajnie wypłynąłeś od razu na ocean, zamiast najpierw popływać w oczku wodny z rybkami ;-)

0
AdamWox napisał(a):
List<ListaModel> lista = _lista2.Where(x => frmForm1._SelectedList.Select(y=>y.ID).Contains(x.ID)).ToList();

Chyba ja zgłupiałem, powyższa linijka ma zwrócić wszystkie ID które są w GridView1, czy wszystkie pozostałe oprócz tych, które są w GridView1 ???

1

Kopiuje po tobie i później takie babole wychodzą

List<ListaModel> lista = _lista2.Where(x => !frmForm1.Instancja._SelectedList.Select(y=>y.ID).Contains(x.ID)).ToList();

Brakuje ci wykrzyknika przed frmForm1

Tutaj działający przykład

1 użytkowników online, w tym zalogowanych: 0, gości: 1