2009-05-06 10 views
6

Este es un general ¿cómo databind cuestiones de trabajo ...DataBind y devolución de datos

Tengo una página simple con un GridView que está obligado (en el código aspx) a un ObjectDataSource.

Puedo buscar en la función Seleccionar() llamada por ObjectDataSource para ver que se invoca en la carga inicial y en cada publicación posterior. Tengo cierta lógica que ocurre en las publicaciones posteriores que afectarán los datos de GridView, y quiero llamar a GridView.DataBind() más adelante en la publicación posterior, después de haber hecho algunos cambios.

¿Hay alguna manera de evitar que vuelva a vincularse automáticamente en cada publicación? ¿Esto significa que no puedo usar ObjectDataSource para este control?

Respuesta

12

Tiene razón en que el control fino que está buscando no es posible y requiere el código. Los objetos fuente de datos de ASP.NET no son más que un dolor en el a **. Descubrirá que a medida que los usa obtendrá situaciones como esta apareciendo una y otra vez.

Algunos de los problemas que encontrará son:

  • No inflexible de tipos
  • inflexible (como se ha anotado)
  • enturbiar el código de presentación

I' he decidido hacer todo el acceso a los datos en el código subyacente y no he mirado hacia atrás.

2

Sí. Si desea ese tipo de control sobre cuándo se produce el enlace de datos, debe hacerlo en el código subyacente.

8

Luché con esta automática unión, así y pensaron que publico mi solución aquí:

  1. eliminar el "DataSourceID" de la página ASPX, cuando no está establecido, no hay unión configuración automática
  2. el DataSourceID en el CodeBehind solo cuando se necesita DataBinding: myGridView.DataSourceID = "MyDataSource";
  3. no llaman myGridView.DataBind() de forma explícita, el enlace de datos pasa automáticamente a PreRender

Me tomó un tiempo para resolver esto, pero ahora wverything funciona bien.

Contexto

uso el ObjectDataSource porque handels todo el paginación y clasificación del Gridview automáticamente para mí. Estoy usando una capa de datos con Linq2SQL y uso sus métodos Skip() y Take() para cargar solo la cantidad de datos necesarios para rellenar una página de GridView.

Utilizando el SelectMethod y SelectCountMethod de los ObjectDataSource

+0

Gracias por la sugerencia. He seguido la sugerencia de Gavin de evitar el desastre. Desde entonces, mi compañía ha cambiado a Telerik, que es compatible con un método de encuadernación por código realmente limpio llamado "NeedDataSource".Aún así, si necesito volver, intentaré esto. –

Cuestiones relacionadas