2012-11-06 14 views
5

Chciałbym, aby niektóre wiersze w Ultragrid były wyłączone w zależności od właściwości Boolean Sync w wierszu. Myślałem o dwóch różnych rozwiązaniach, ale żadne z nich się nie sprawdziło.Infragistics Ultragrid Jak mogę wyłączyć wiersz w zależności od właściwości

1) Odczytaj właściwość Sync do właściwości Aktywacja wiersza. czy to możliwe?

2) W zdarzeniu takim jak InitializeRow w siatce sprawdź właściwość Sync i wyłącz wiersz, jeśli jest ustawiony na true. Ta metoda działa niezależnie od tego, że jeśli do siatki zostanie dodanych kilka kolejnych wierszy, a następnie zostanie zapisana siatka, dane zostaną ponownie uporządkowane, aby wyłączony wiersz nie zawierał prawidłowych danych. Dlatego potrzebuję sposobu, aby się dowiedzieć, kiedy to się stanie, aby móc później ponownie przejść i wyłączyć odpowiednie rzędy.

private void ultraGrid1_InitializeRow(object sender, Infragistics.Win.UltraWinGrid.InitializeRowEventArgs e) 
{ 
    e.Row.Activation = Infragistics.Win.UltraWinGrid.Activation.AllowEdit; 
    if (e.Row.Cells[grdBoundGrip.DisplayLayout.Bands[0].Columns["Sync"]].Value != null && (bool)e.Row.Cells[grdBoundGrip.DisplayLayout.Bands[0].Columns["Sync"]].Value) 
      e.Row.Activation = Infragistics.Win.UltraWinGrid.Activation.Disabled; 
} 
+2

Czy możesz pokazać kod w zdarzeniu InitializeRow? – Steve

+0

Witaj, Steve, dodałem powyższy kod, który działa poprawnie. Problem polega na tym, że po kliknięciu przycisku Zapisz pojawia się kod, który aktualizuje i zmienia kolejność elementów dataitems i niestety nie powoduje to ponownego uruchomienia zdarzenia InitializeRow. – Jim

+0

Dokumenty dla [InitializeRow] (http://www.infragistics.com/help/topic/5CCF90C4-EEF6-4F4D-A979-B6F505F93318) wyjaśniają, że to zdarzenie powinno być wywoływane również w przypadku zmiany wartości pojedynczej komórki. Jest więc coś po poleceniu save, które uniemożliwia wystrzelenie tego zdarzenia. Ponownie, kod po komendzie zapisu może być pomocny. – Steve

Odpowiedz

5

Możesz również napisać to w swojej własnej funkcji. Mam nadzieję, że poniższe rozwiązanie może ci pomóc.

Tworzenie formularzem systemu Windows „test” .. i przeciągnij/upuść „ultragird” w takiej formie, jak pokazano poniżej okien .. enter image description here

utworzyć funkcję obciążenia forma „test_Load” .. i spróbować poniżej kod .. twoje wiersze z synchronizacją "fałsz" są wyłączone.

private void test_Load(object sender, EventArgs e) 
    { 
     DataTable dt = new DataTable(); 
     dt.Columns.Add("Name", typeof(string)); 
     dt.Columns.Add("Address", typeof(string)); 
     dt.Columns.Add("Sync", typeof(string)); 
     dt.Rows.Add(new object[] {"John","United States","False" }); 
     dt.Rows.Add(new object[] { "Xing", "China", "True" }); 
     dt.Rows.Add(new object[] { "Ram", "Nepal", "True" }); 
     dt.Rows.Add(new object[] { "Germany", "Thomas", "False" }); 
     dt.Rows.Add(new object[] { "Pedrik", "Russia", "True" }); 

     ultraGrid1.DataSource = dt; 
     ultraGrid1.DataBind(); 

     DisableRowsWithSyncOff(dt.Rows.Count); 

    } 
    private void DisableRowsWithSyncOff(int _rowcount) 
    { 
     for (int i = 0; i < _rowcount; i++) 
     {     
      if (!Convert.ToBoolean(ultraGrid1.Rows[i].Cells["Sync"].Value.ToString())) 
      {      
       ultraGrid1.Rows[i].Activation = Infragistics.Win.UltraWinGrid.Activation.Disabled; 
      } 
     } 
    } 
Powiązane problemy