2010-02-26 109 views
6

Estoy haciendo una página web con una búsqueda que trae mucha información de MSSQL. Lo que hice fue un procedimiento almacenado que devuelve solo la página que se verá en el sitio web.Linkbutton dentro de Repeater para buscar ASP.Net

Ahora mismo estoy trabajando en la paginación ya que necesito mostrar algo similar a google. Si está en la página 1, muestra las primeras 10 páginas y si se encuentra en la página 19 desde la página 9 a la 28.

Creo que la mejor opción para mostrar los números de página es usar un botón dentro de un repetidor. El problema que tengo ahora es que no sé cuál es la mejor manera de tomar el número de página en la devolución de datos.

Haciendo una muestra rápida que asigna un ArrayList a repeater.datasource:

<asp:Repeater ID="Repeater2" runat="server"> 
    <ItemTemplate> 
      <asp:LinkButton ID="LinkButton1" runat="server" CommandArgument="<%# Container.DataItem %>"><%# Container.DataItem %></asp:LinkButton> 
    </ItemTemplate> 
    </asp:Repeater> 
    <asp:LinkButton ID="LinkButton2" runat="server" CommandArgument="4654">Test #1</asp:LinkButton> 

En mis Default.aspx.cs presentar tengo el siguiente código

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (this.IsPostBack) 
     { 
      string x = LinkButton2.CommandArgument; 
      //string y = LinkButton1.CommandArgument; 
//I know this line will not work since the Linkbutton1 is inside the Repeater. 
      } 

¿Qué voy a hacer para que ¿funciona?

¿Alguien tiene una mejor solución para este aviso?

Gracias

Jerry

Respuesta

0

Es sólo una idea, ¿ha intentado utilizar un objeto "cuadrícula de datos", añadiendo una columna, lo que es una plantilla de elementos y luego poner en los elementos que necesita para repetir dentro de la plantilla formateada El DataGrid también maneja automáticamente paginación cuando se establece en verdadero ...

+0

Bueno, el problema con el uso de un pagging automática es que Necesito traer todos los registros de la base de datos y para hacerlo más rápido. Quiero devolver exactamente lo que se mostrará;) –

+0

solo un pensamiento ... – DRapp

0

Nunca indicó qué tipo de control es su paginación. Si está utilizando ASP.Net 3.5, le sugiero ALTAMENTE usar el control ListView y manejar el paginado con el control DataPager.

+0

Lo que he visto es que Datapager necesita un control asignado a la paginación automática y para que necesito traer todos los registros del DB y para hacerlo más rápido, quiero devolver lo que se mostrará –

9

usted está buscando para el evento ItemCommand:

<asp:Repeater ID="Repeater1" OnItemCommand="ItemCommand" runat="server"> 
    <ItemTemplate> 
     <asp:LinkButton CommandName="ButtonEvent" CommandArgument="<%# Container.DataItem %>" Text="<%#Container.DataItem %>" runat="server"></asp:LinkButton> 
    </ItemTemplate> 
    </asp:Repeater> 

Código atrás:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
    Repeater1.DataSource = Enumerable.Range(1, 10); 
    Repeater1.DataBind(); 
    } 
} 

protected void ItemCommand(Object Sender, RepeaterCommandEventArgs e) 
{ 
    Response.Write("The no. " + ((LinkButton)e.CommandSource).Text + " button was clicked!"); 
} 

... pero ¿está realmente seguro de lo que necesita el LinkButton? Una etiqueta de anclaje HTML simple podría funcionar igual de bien, y es menos difusa. :)

+0

¡Gracias, señor! ¡Funcionó muy bien! –

+0

De nada, me alegro de ayudar. No olvides marcar seleccionar una respuesta aceptada para tus preguntas. :) –

+0

Gracias por este Jakob. La respuesta merece ser aceptada. –

0

que utilizan @JakobGade y esto es lo que funcionó para mí:

<asp:Repeater ID="rpMemList" runat="server" ClientIDMode="Static" 
onitemcommand="rpMemList_ItemCommand"> 
    <ItemTemplate> 

      <asp:LinkButton ID="lbMember" CommandArgument='<%# Eval("memID")%>' CommandName="SelMem" runat="server" ClientIDMode="Predictable"><%# Eval("memFullName")%></asp:LinkButton> 

    </ItemTemplate> 
</asp:Repeater> 

Entonces probado dentro de código subyacente:

protected void rpMemList_ItemCommand(object source, RepeaterCommandEventArgs e) 
    { 
     string a = e.CommandArgument.ToString(); 
     string b = e.CommandName.ToString(); 
     string c = e.CommandSource.ToString(); 
     string d = e.Item.ToString(); 

    } 
Cuestiones relacionadas