30 messaggi dal 30 maggio 2008
Salve a tutti,

ho un problema e chiedo ausilio a voi massimi esperti.

Ho una GridView bindata in questo modo:

 
<asp:GridView ID="_myGrd" runat="server" Width="100%" AutoGenerateEditButton="False" 
AutoGenerateColumns="False" GridLines="None" HeaderStyle-HorizontalAlign="Left" 
CssClass="standardTable" OnRowEditing="_myGrd_RowEditing" OnRowUpdating="_myGrd_RowUpdating" 
OnRowCancelingEdit="_myGrd_RowCancelingEdit" OnRowDeleting="_myGrd_RowDeleting"> 
<Columns> 
<asp:TemplateField HeaderText="Colonna1" ControlStyle-Width="100%"> 
<ItemTemplate>                                                     
<%#Eval("COL_1") %> 
</ItemTemplate> 
<EditItemTemplate> 
<asp:TextBox ID="_txtCdDatoInstanceData" runat="server" Width="20%" AutoPostBack="true" Text='<%#Eval("COL_1") %>' CssClass="input"></asp:TextBox> 
</EditItemTemplate> 
<HeaderStyle CssClass="gridViewRow" /> 
</asp:TemplateField> 
<asp:TemplateField HeaderText="Colonna2" HeaderStyle-HorizontalAlign="Left" ControlStyle-Width="100%"> 
<ItemTemplate> 
<%#Eval("COLONNA_2") %> 
</ItemTemplate> 
<EditItemTemplate> 
<asp:CheckBox ID="_ckbSearchable" runat="server" Checked='<%# ToCheckOrNotToCheck(Eval("FG_RICERCA").ToString()) %>' 
                                                            OnCheckedChanged="_ckbSearchable_CheckedChanged" AutoPostBack="true"></asp:CheckBox> </EditItemTemplate> 
</asp:TemplateField> 


Dove COL_1 e COLONNA_2 vengono fuori da una query su DB e sono proprio i nomi di tale colonne lato DB.

Avrei questa necessità: inserire un'ulteriore colonna (alla fine di queste due) che mostri un imageButton se, ad esempio,
il valore dell'ItemTemplate della colonna2 sia "Pippo" (ovviamente tale nuova colonna deve avere SOLO l'itemTemplate dato che
non cambia il suo "stato" in caso di editing).
Se così fosse, come detto, appare l'imageButton cliccabile che porta ad un'altra pagina, altrimenti la cella rimane vuota...

Ho provato a gestire la cosa lato pagina aspx ma discriminare la visibilità dell'itemTemplate mi risulta impossibile.
Lato code-behind ho provato ad inserirne la logica nel metodo che "binda" la gridView con la Tabella (risultato della query sul DB)
ma non so proprio come fare...

qualcuno potrebbe aiutarmi (sia lato aspx e cha lato code-behind)?
Grazie mille!!!!
Modificato da liveforever il 08 aprile 2010 14.47 -
3 messaggi dal 29 maggio 2001
Ciao,
puoi gestire la cosa code-behind in questo modo:

nell'evento RowDataBound della gridview, se il RowState è edit
prendi l'oggetto imageButton e lo metti invisibile se non soddisfa la tua condizione

in c# sarebbe

if (e.Row.RowState == DataControlRowState.Edit)
{
ImageButton x = (ImageButton)e.Row.FindControl("nomeoggetto");
if (DataBinder.Eval(e.Row.DataItem, "Prod_Serial", "")!="PIPPO")
x.Visible = false;
}


ciauz

Riccardo
30 messaggi dal 30 maggio 2008
Ciao!

Innanzitutto grazie mille per la risposta...

Te dici:
nell'evento RowDataBound della gridview, se il RowState è edit


2 cose:
1) non ho un metodo RowDataBound ma, come detto, uso un metodo che fa una query su un DB, ottiene una tabella, e sfrutta la proprietà DataSource del datagrid:

_myGrd.DataSource = tableQuery;
_myGrd.DataBind();

Te consigli quindi di inserire qui questa logica?

2) correlato al punto 1: non ho l'eventHandler (la e) per poter gestire l'editMode e, comunque, avrei bisogno di mostrare (o nascondere) l'immagine prim'ancora di entrare in edit mode, ma non appena la griglia viene mostrata a video...

Spero d'esser stato chiaro...
3 messaggi dal 29 maggio 2001
per gestire l'evento RowDataBound devi prima aggiungere l'evento alla tua gridview

<asp:GridView id="pippo" runat="server" OnRowDataBound="pippo_RowDataBound">
</asp:GridView>


e poi vai a gestire l'evento aggiungendo nel code-behind la funzione

protected void pippo_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowState == DataControlRowState.Edit)
{
ImageButton x = (ImageButton)e.Row.FindControl("nomeoggetto");
if (DataBinder.Eval(e.Row.DataItem, "Prod_Serial", "")!="PIPPO")
x.Visible = false;
}
}


fammi sapere :)

Riccardo

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.