2012-08-09 9 views
7

Tengo un GridView al que he usado un ObjectDataSoure como fuente de datos. ObjectDataSource está tomando los parámetros de un TextBox y DropDownList que luego pasan al procedimiento almacenado. También hay un botón llamado Buscar que se puede usar para forzar una actualización en GridView proporcionando/cambiando valores en el TextBox y/o DropDownList. Sin embargo, noté que si cambiaba los valores, no tenía que hacer clic en el botón Buscar; simplemente haciendo clic en el GridView provoca un enlace de datos.¿Es posible detener ObjectDataSource de la vinculación automática?

¿Hay alguna forma de evitar esta acción mientras se usa ObjectDataSource?

+0

Por favor, muestre su código. Creo que tiene una devolución de datos automática verdadera para uno de sus controles. – SMK

+0

@ShoaibMuhammadKhan Ni el ObjectDataSource ni el control GridView tienen una propiedad de AutoPostback. TextBox y DropDownList tienen AutoPostback establecido como falso. –

+0

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

Respuesta

6

Cuando asigna un DataSourceID en el GridView, la cuadrícula se enlazará automáticamente a ObjectDataSource. Simplemente puede omitir esa propiedad en el GridView y esperar hasta que el botón de búsqueda haga clic en el evento para asignarlo.

+0

pero ¿cómo se hace automáticamente la devolución de datos de la página en gridview? – SMK

+0

@ derek-hunziker ¿Quiere eliminar la propiedad DataSourceID de GridView del aspx y configurarla desde el código subyacente? –

+0

Correcto, elimínelo de la página aspx y espere hasta que su evento de clic lo asigne en el código subyacente. Sería útil ver su definición de GridView así como su DataSource. ¿Puedes publicar algún código? –

3

El problema es que cada vez que se cambia un parámetro utilizado para ObjectDataSource, el ODS realiza un "DataBind".

Puede usar dos HiddenFields para mantener los valores. ObjectDataSource solo hará un "DataBind" cuando cambie los valores en HiddenFields. De modo que puede cambiar los valores en TextBox y DropDownList, y cuando quiere un "DataBind", solo necesita copiar los valores en HiddenFields.

Aquí es un ejemplo de código que hice para otra question: Q11874496WebApp.7z

+1

Gracias @Hailton por su sugerencia. Me siento un poco reacio a usar campos ocultos ya que ya he usado bastante. Sin embargo, si lo malo empeora, probablemente lo use, después de todo, podría argumentarse qué diferencia hay entre un par adicional de campos ocultos ... ¿no? –

1

En mi caso acabo de utilizar un campo booleano privado en código subyacente y respetar sus valores en caso datasourceName_Selecting.

Por ejemplo I declaró lo siguiente:

private bool IsInSearchingMode = false; 

conjunto es cierto sólo en modo de búsqueda:

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

y luego comprobar el valor de Selección de eventos:

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

// e.result = select code 
} 

Un El inconveniente es que una nueva page_load que no es causada por btnSearch_Click restablecerá el valor de la variable privada. Si desea que sea persistente, debe usar un campo oculto según lo propuesto o guardarlo en viewstate.

Cuestiones relacionadas