Tengo un GridView que tiene un DataSourceID apuntando a un ObjectDataSource. ObjectDataSource apunta a un método que devuelve un LINQ IQueryable utilizando las propiedades TypeName, SelectMethod y SelectCountMethod del control ObjectDataSource. Lo que ocurre es que los datos se cargan correctamente por adelantado. Sin embargo, en la devolución de datos, si elimino las filas de GridView y trato de volver a enlazar con el explícito GridView.DataBind(), no funciona. Sé que LINQ está devolviendo el recuento de filas correcto y tal porque he llamado al método de conteo y devuelve el recuento de filas correcto. Aquí hay un ejemplo rápido:GridView no se vuelve a vincular correctamente después de la devolución
<asp:GridView ID="TestGridView" runat="server" PageSize="20"
AutoGenerateColumns="false" AllowPaging="true"
AllowSorting="false" DataSourceID="TestDataSource">
<Columns>
...
</Columns>
</asp:GridView>
<asp:ObjectDataSource ID="TestDataSource" runat="server"
EnablePaging="true" SelectCountMethod="GetDetailCount"
SelectMethod="GetDetails" TypeName="MyApp.PageClass" />
He intentado añadir un botón y añadiendo el TestGridView.DataBind(); método para eso. Intenté agregarlo al evento Page_PreRender. No importa lo que intento, no está funcionando.
Como alguien sugirió a continuación, he intentado moverlo a Page_Load también, y no ir. He aquí un ejemplo aproximado de mi código:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
// Set "initial" query parameters, then ...
BindData();
}
}
private void BindData()
{
// EDITED: Removed the code below since I'm not looking to delete the
// rows from the database, but rather get the GridView to rebind
// which its not.
////Remove all current rows from the GridView
//int colCount = TestGridView.Rows.Count;
//for (int x = 1; x <= colCount; x++)
//{
// TestGridView.DeleteRow(x);
//}
// Bind GridView to the ObjectDataSource
TestGridView.DataBind();
}
protected void RegenerateImageButton_Click(object sender, ImageClickEventArgs e)
{
// Set "updated" query parameters, then ...
BindData();
}
Modificó lo anterior nuevamente. –