2016-02-29 12 views
14

Chcę pokazać pasek przewijania siatki kendo tylko wtedy, gdy jest to konieczne. Oto moja inicjalizacji sieci:Ukrywanie/wyświetlanie paska przewijania siatki Kendo

@(Html.Kendo().Grid<UT.Repo.Core.up_HedgedCustomerLatestTradeListGet_Result>() 
    .Name("lastPositionsGrid") 
    .Columns(columns => 
    { 
     columns.Bound(c => c.ACCOUNT).Title("Hesap").Width(70); 
     columns.Bound(c => c.TICKET).Title("Emir"); 
     columns.Bound(c => c.SIDE).Title("Yön").Width(50); 
     columns.Bound(c => c.STATE).Title("Durum").Width(65); 
     columns.Bound(c => c.SYMBOL).Title("Sembol"); 
     columns.Bound(c => c.VOLUME).Title("Hacim").Width(65); 
     columns.Bound(c => c.OPENPX).Title("Açılış"); 
     columns.Bound(c => c.CLOSEPX).Title("Kapanış"); 
     columns.Bound(c => c.P_L).Title("Kar Zarar").Width(75); 
     columns.Bound(c => c.SL).Title("Zararı Durdur"); 
     columns.Bound(c => c.TP).Title("Karı Al"); 
     columns.Bound(c => c.TIME).Title("Zaman").ClientTemplate("#= kendo.toString(TIME, \"dd/MM/yyyy HH:mm:ss\") #").Width(160); 
    }) 
    .Scrollable() 
    .Sortable() 
    .Resizable(resize => resize.Columns(true)) 
    .Events(events => events.DataBound("onLastPositionsGridDataBound")) 
    .DataSource(dataSource => dataSource 
     .Ajax() 
     .Sort(sort => sort.Add("TIME").Descending()) 
     .Read(read => read.Action("HedgedCustomerLatestTradeListGet", "Home")) 
    ) 
) 

O danych związany Próbuję ustawić widoczność paska przewijania:

function onLastPositionsGridDataBound(e) { 
    var gridHeight = $("#lastPositionsGrid").outerHeight(); 
    var gridHeaderHeight = $("#lastPositionsGrid table:eq(0)").outerHeight(); 
    var gridBodyHeight = $("#lastPositionsGrid table:eq(1)").outerHeight(); 
    if (gridHeight < gridHeaderHeight + gridBodyHeight) { // show the scrollbar 
     $("#lastPositionsGrid .k-grid-header").css('padding', ''); 
     $("#lastPositionsGrid .k-grid-header").css('padding-right', '17px'); 
     $("#lastPositionsGrid .k-grid-content").css('overflow-y','scroll'); 
    } 
    else { // hide the scrollbar 
     $("#lastPositionsGrid .k-grid-header").css('padding','0 !important'); 
     $("#lastPositionsGrid .k-grid-content").css('overflow-y', 'visible'); 
    } 
} 

Część, która ukrywa pasek przewijania wykonuje swoją pracę dobrze, ale część, która pokazuje pasek przewijania nie. Oto zrzut ekranu po okazaniu przewijania:

enter image description here

Jak widać linie te oddzielają komórki w nagłówku i wiersze nie pasuje. Jak mogę to naprawić?

+0

Dam ci prostą odpowiedź "hakera". Jeśli masz kod, który może poprawnie zdecydować, kiedy ukryć pasek przewijania, ale nie może poprawnie zdecydować, kiedy pokazać pasek przewijania, rozwiązanie jest oczywiste. Zawsze pokazuj pasek przewijania, THEN uruchom swój kod, aby zdecydować, czy chcesz go ukryć. – jerrylagrou

+0

Daj mi znać, jeśli moja odpowiedź ci pomoże. –

Odpowiedz

2

to zadziała, spróbuj przelać automatycznie zawsze.

function onLastPositionsGridDataBound(e) { 
    var gridHeight = $("#lastPositionsGrid").outerHeight(); 
    var gridHeaderHeight = $("#lastPositionsGrid table:eq(0)").outerHeight(); 
    var gridBodyHeight = $("#lastPositionsGrid table:eq(1)").outerHeight(); 
    if (gridHeight < gridHeaderHeight + gridBodyHeight) { // show the scrollbar 
     $("#lastPositionsGrid .k-grid-header").css('padding', ''); 
     $("#lastPositionsGrid .k-grid-header").css('padding-right', '17px'); 
     $("#lastPositionsGrid .k-grid-content").css('overflow-y','auto'); 
    } 
    else { // hide the scrollbar 
     $("#lastPositionsGrid .k-grid-header").css('padding','0 !important'); 
     $("#lastPositionsGrid .k-grid-content").css('overflow-y', 'auto'); 
    } 
} 
+0

Tak, to jest droga. Czy jednak jedna linia CSS nie sprawiłaby, że cała ta funkcja byłaby niepotrzebna? '#lastPositionsGrid .k-grid-content {overflow: auto}' – Aziz

+0

ya w CSS jest minimalny –

+0

Ale to nie rozwiązuje problemu. Zobacz zrzut ekranu, który dodałem. Otrzymuję ten sam wynik. – anilca

1

Dam ci prostą odpowiedź "hakera". Jeśli masz kod, który może poprawnie zdecydować, kiedy ukryć pasek przewijania, ale nie może poprawnie zdecydować, kiedy pokazać pasek przewijania, rozwiązanie jest oczywiste. Zawsze pokazuj pasek przewijania, THEN uruchom swój kod, aby zdecydować, czy chcesz go ukryć.

+0

Witaj hackerze! Dziękuję za odpowiedź, ale problem nie polega na decydowaniu, kiedy pokazać lub ukryć pasek przewijania. Skrypt decyduje, że poprawnie. Jak widać źródło danych sieci są odświeżane przez wywołania ajaxowe. Potrzebuję więc kilku linii kodu dla obu stanów: pokazany jako ukryty, ukryty do pokazania. – anilca

2

Właśnie zmieniłem dwie rzeczy w twoim javascript i działało jak czar. Dzięki

  1. Zmiana wartości od 17px do 21px. Więc w zasadzie musisz znaleźć właściwą wartość padding-right.

  2. Zmiana wartości z '0 !important' na '0px'. Aby naprawić nagłówek, nie wyświetlaj dodatkowej kolumny na końcu.

No Scrollbar

With Scrollbar

+0

Ta wersja nie ukrywa paska przewijania w moim przypadku. Zrobiłeś coś innego? – anilca

+0

wypróbuj różne możliwe wartości przepełnienia. overflow-y hidden powinno załatwić sprawę. –

+0

Czy byłeś w stanie znaleźć rozwiązanie swojego problemu. Jeśli tak, czy jesteś w stanie to zrobić? –

0

Ponieważ są ręcznie ustawiając pasek przewijania do siatki, siatka nie ma pojęcia o tej zmianie. Aby to naprawić, po prostu wypełnij kolumnę po zakończeniu wyświetlania lub ukrywania paska przewijania. Więc wewnątrz twojej funkcji onLastPositionsGridDataBound po twoim, jeśli chcesz ustawić/ukryć pasek przewijania, automatycznie dopasuj kolumny, więc umieść ten kod po znaku if if.

var grid = $("#lastPositionsGrid").data("kendoGrid"); 
for (var i = 0; i < grid.columns.length; i++) { 
     grid.autoFitColumn(i); //autofit each column. 
} 

Daj mi znać, jeśli to pomoże.

+0

Nie rozwiązuje to problemu. Dzięki za odpowiedź – anilca

Powiązane problemy