Button in controllo Repeater

sabato 01 gennaio 2011 - 23.00

perla0279 Profilo | Senior Member

Ciao
per motivi di formattazione, invece di utilizzare la comoda DataGrid, devo utilizzare un repeater.
Ho un problema con il controllo Button.

Praticamente dovrei inserire in ogni riga un Button oppure un ImageButton che al click dovrebbe prendersi la variabile di riga e salvarla in una TXT della stessa pagina.
Con il DataGrid il tutto era facile, con e.CommandName riuscivo a prendermi l'id di ogni riga, come posso fare un qualcosa di simile ma utilizzando il repeater ???

paoval72 Profilo | Senior Member

Ciao, puoi postare un po' di codice, tanto per capire che cosa ti serve recuperare dalla riga del repeater selezionato?
Comunque, in linea di massima, di solito io utilizzo questo metodo:
1) in ogni riga del repeater aggiungo anche i campi (nascosti o meno) dei dati che voglio recuperare, come ad esempio un ID univoco di una tabella del DB.
2)Tra gli eventi del Repeater crei e registri l'ItemCommand
3) In questo evento hai due elementi:
A) l'oggetto SOURCE, che è il repeater stesso
B) l'ARGUMENT, a cui puoi passare delle segnalazioni. Ad esempio, per un tasto "elimina" passi il testo "delete" e per un tasto "apri" passi il testo "open".
A questo punto, al click del bottone, si scatena l'evento "onitemcommand". Da qui posso recuperare tutti i dati della riga ed eventualmente fare le mie operazioni (delete, open, etc...)

Provo ad abbozzarti un esempio in C#, dove ho un repeater con dati passati da un DB. I campi di ogni riga sono: un image button, una label con l'id della riga, una label con il titolo della riga.
lato client:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Ora gestisco l'evento (che dovrebbe avere creato in automatico Visual Studio) lato server:
Ad esempio, se il command che gli passo è "apri", posso richiamare un'altra funzione per aprire il dettaglio, recuperando e passandogli l'Id della riga o quel che voglio

private void RepeaterCommand(object source, RepeaterCommandEventArgs e) { if (e.CommandArgument.ToString().CompareTo("apri") == 0) { int ID_riga = Convert.ToInt32(((Label)e.Item.FindControl("lbl_idRiga")).Text); ApriDettaglio(ID_riga); } //se ad esempio voglio colorare di rosso il testo del titolo: ((Label)e.Item.FindControl("lbl_idRiga")).ForeColor = Color.Red; }


Spero di essere stato chiaro e che ti possa servire.

Ciao!

perla0279 Profilo | Senior Member

sono riuscita quasi a finire :-)
adesso ho un problema nell'inserire un id in una text box presente sempre all'interno del repeater ed in cui va inserita una quantità.

<asp:Repeater ID="MyRepeater" runat="server" OnItemCommand="MyRepeater_onItemCommand" onItemDataBound="MyRepeater_ItemDataBound" >

<asp:TextBox ID="TextBox1" runat="server" Text="" Width="50"></asp:TextBox>

<asp:Button ID="MyButton" CommandName="Ordina" runat="server" CommandArgument=<%#DataBinder.Eval(Container.DataItem, "id") %> Text="Ordina" />






Nel codice Vb mi ritrovo:
Protected Sub MyRepeater_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.RepeaterItemEventArgs) Handles MyRepeater.ItemDataBound

DirectCast(e.Item.FindControl("TextBox1"), TextBox).Text = e.Item.DataItem("idarticolo")


End Sub


Public Sub MyRepeater_onItemCommand(ByVal Sender As Object, ByVal e As System.Web.UI.WebControls.RepeaterCommandEventArgs)
Dim pippo As String
pippo = e.CommandArgument

Dim txtBoxSender As TextBox
Dim strTextBoxID As String

' txtBoxSender = CType(Sender, TextBox)
' strTextBoxID = txtBoxSender.ID

If e.CommandName = "Ordina" Then
Dim oMyPrimaryKey As Object = e.CommandArgument
Dim y = DirectCast(e.Item.FindControl("TextBox1"), TextBox).Text
Dim z = DirectCast(e.Item.FindControl("CheckBox1"), CheckBox).Checked
Dim x = DirectCast(e.Item.FindControl("DropDownList1"), DropDownList).SelectedItem.Value
messaggio.Text = oMyPrimaryKey & "-" & y & "-" & z & "-" & x
End If
End Sub



Il recuper dell'id del button funziona bene, non funziona invece la textbox.
Quando arrivo al : MyRepeater_ItemDataBound
mi da l'errore
Variabile oggetto o variabile del blocco With non impostata.
NullReferenceException was unhandled by user code

paoval72 Profilo | Senior Member

Ok.
Non mi è chiaro quel che vuoi fare nel databound:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra


PV
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5