Te paso un ejemplo simplificado, la pagina html tiene un gridview asociado
al datasource y un formulario de filtro de datos, al presionar el boton de
filtro hago el filtro sobre el datasource.
El unico y gran problema que esto me esta generando es que al mostrarme en
el gridview solamente los datos filtrados, al presionar el comando Select,
me toma el rowID como si los datos no estuvieran filtrados.
Alguna idea sobre esto??
HTML
<asp:GridView ID="ProveedoresView"
AllowPaging="True"
PageSize="15"
AutoGenerateColumns ="False"
DataSourceID="ProveedoresDS"
DataKeyNames="IDproveedoresOP"
runat="server"
>
<Columns >
<asp:BoundField DataField="IDProveedoresOP"
HeaderText="IDOP" Visible="False" >
<ItemStyle HorizontalAlign="Left" />
</asp:BoundField>
<asp:BoundField DataField="Empresa"
HeaderText="Empresa">
<ItemStyle HorizontalAlign="Left" />
</asp:BoundField>
<asp:BoundField DataField="proveedor"
HeaderText="Proveedor" SortExpression="proveedor">
<ItemStyle HorizontalAlign="Left" />
</asp:BoundField>
<asp:TemplateField HeaderText="Fecha">
<ItemStyle HorizontalAlign="Center" />
<ItemTemplate>
<asp:Label ID="lblFecha" runat="server"
Text='<%# Bind("Fecha", "{0:dd/MM/yyyy}") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:CommandField
HeaderText= "Modif"
ButtonType="Image"
DeleteImageUrl ="~/images/iconos/Delete.gif"
ShowDeleteButton="True"
SelectImageUrl="~/images/iconos/Edit.gif"
ShowSelectButton="True"
SelectText="Modificar Item"
DeleteText="Eliminar registro"
Visible=false
/>
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="ProveedoresDS" runat="server"
ConnectionString="<%$ ConnectionStrings:CS %>"
SelectCommand="SELECT *
FROM ProveedoresOrdenPago "
>
</asp:SqlDataSource>
Vb.net
Protected Sub btnFiltrar_Click(ByVal sender As Object, ByVal e As
System.EventArgs) Handles btnFiltrar.Click
ProveedoresDS.FilterExpression = " proveedor like '%" &
txtFiltro.Text & "%'"
Page.DataBind()
End Sub
Protected Sub ProveedoresView_SelectedIndexChanging(ByVal sender As Object,
ByVal e As System.Web.UI.WebControls.GridViewSelectEventArgs) Handles
ProveedoresView.SelectedIndexChanging
Dim intIDItemSelected As String
intIDItemSelected =
ProveedoresView.Rows(e.NewSelectedIndex).Cells(0).Text.ToString
Response.Redirect("modifproveedores.aspx?IDproveedor=" &
intIDItemSelected)
End Sub
_____
From: [email protected] [mailto:[EMAIL PROTECTED] On Behalf Of Gabriel
Osorio
Sent: Thursday, May 24, 2007 1:49 PM
To: [email protected]
Subject: [puntonet] Problema con gridview filtrado
Me interesa.
Estas enlazando el control con un dataView? Algo como:
private void BindData(DataTable dt, string filter)
{
DataView dv = new DataView(dt,"filter = '" + filter + "'",
"",DataViewRowState.CurrentRows);
gridview.DataSource = dv;
gridview.DataBind();
_____
From: [email protected] [mailto:[EMAIL PROTECTED] On Behalf Of Gabriel
Tobal
Sent: Thursday, May 24, 2007 11:04 AM
To: [email protected]
Subject: [puntonet] Problema con gridview filtrado
Hola a todos,
Tengo un gridview enlazado a un datasource, el gridview tiene también la
columna command para hacer update y delete.
Al datasource le aplico un filtro para segmentar los registros obtenidos
según ciertos casos, pero al hacer un update, el evento obtiene el rowID de
la fila como si no hubiese realizado ningún filtro.
Alguien tiene alguna idea de como obtener el rowID correcto.
Adjunto el ej. del codigo de como obtengo el rowID
intIDItemSelected = ProveedoresView.Rows(e.NewSelectedIndex).Cells(0).
Text.ToString
Muchas gracias
Gabriel