2012-08-09 10 views
7

Mam GridView, do którego używam ObjectDataSoure jako źródło danych. ObjectDataSource pobiera parametry z TextBox i DropDownList, które następnie są przekazywane do procedury przechowywanej. Istnieje również przycisk o nazwie Search, który może być użyty do wymuszenia odświeżenia w GridView poprzez dostarczenie/zmianę wartości w TextBox i/lub DropDownList. Zauważyłem jednak, że jeśli zmieniłem wartości, nie muszę klikać przycisku Szukaj; po prostu kliknięcie na GridView powoduje powiązanie danych.Czy można zatrzymać automatyczne pobieranie obiektu ObjectDataSource?

Czy mimo to można zapobiec tej czynności, nadal korzystając z ObjectDataSource?

+0

Proszę pokazać swój kod. Myślę, że automatyczna odpowiedź zwrotna jest prawdziwa dla jednej z kontroli. – SMK

+0

@ShoaibMuhammadKhan Kontrolka ObjectDataSource ani GridView nie ma właściwości AutoPostback. TextBox i DropDownList mają ustawione AutoPostback jako false. –

+0

Prawdopodobny duplikat: http://stackoverflow.com/questions/831208/databind-and-postback http://stackoverflow.com/questions/1262220/is-this-the-only-way-we-can-force -objectdatasource-to – SMK

Odpowiedz

6

Po przypisaniu obiektu DataSourceID w GridView, siatka zostanie automatycznie powiązana z ObjectDataSource. Możesz po prostu pominąć tę właściwość w GridView i poczekać, aż kliknięcie przycisku wyszukiwania kliknie, aby ją przypisać.

+0

, ale jak automatycznie odświeżanie strony na gridview kliknij? – SMK

+0

@ derek-hunziker Czy chcesz usunąć właściwość DataSourceID GridView z aspx i ustawić ją z tyłu kodu? –

+0

To prawda, usuń go ze strony aspx i poczekaj, aż zdarzenie click, aby przypisać go w codebehind. Pomoże to zobaczyć twoją definicję GridView, a także twoje źródło danych. Czy możesz napisać jakiś kod? –

3

Problem polega na tym, że za każdym razem, gdy dowolny parametr używany do ObjectDataSource jest zmieniony, ODS wykonuje "DataBind".

Możesz użyć dwóch pól HiddenFields, aby zachować wartości. ObjectDataSource wykona tylko "DataBind", gdy zmienisz wartości na HiddenFields. Możesz więc zmienić wartości w TextBox i DropDownList, a kiedy chcesz "DataBind", wystarczy skopiować wartości do HiddenFields.

Oto przykładowy kod zrobiłem dla innego question: Q11874496WebApp.7z

+1

Dzięki @Hailton za Twoją sugestię. Czuję się trochę niechętnie, aby używać już ukrytych pól, ponieważ mam już dość dużo. Jeśli jednak pogorszy się zła, prawdopodobnie wykorzystam to, po czym można się spierać, jak dużą różnicę stanowi dodatkowa para ukrytych pól ... prawda? –

1

W moim przypadku właśnie użył prywatną pole logiczną w kodzie i szanować swoje wartości na razie datasourceName_Selecting.

Na przykład ja ogłoszony następujący:

private bool IsInSearchingMode = false; 

zestaw to prawda tylko w trybie wyszukiwania:

protected void btnSearch_Click(object sender, EventArgs e) 
    { 
     this.IsInSearchingMode = true; 
     this.gridData.DataBind(); 
    } 

a następnie sprawdzić wartość o wybieraniu zdarzenia:

 protected void myLinqDataSource_Selecting(object sender, LinqDataSourceSelectEventArgs e) 
     { 
      e.Result = new List<BranchDataClass>(); 
      if (!this.IsInSearchingMode) 
       return; 

// e.result = select code 
} 

A wadą jest to, że nowy parametr page_load, który nie jest spowodowany przez btnSearch_Click, zresetuje wartość zmiennej prywatnej. Jeśli chcesz, aby był trwały, powinieneś użyć ukrytego pola jako proponowanego lub zapisz go do stanu oglądania.