GridView / ObjectDataSource all'interno di runat = contenitore del server non si collega
-
05-07-2019 - |
Domanda
Ho un piccolo modulo web con 2 pulsanti di opzione, chiamali PickFromList e EnterValue. Quando PickFromList è selezionato, voglio mostrare un GridView che ho configurato per associare a ObjectDataSource. Quando EnterValue è selezionato, desidero che GridView scompaia.
Questo modulo è strutturato utilizzando una tabella e desidera nascondere / mostrare le righe appropriate in base ai dati appropriati e all'input dell'utente.
Sfortunatamente GridView non si lega quando la riga trPickFromList2 specifica l'id e runat = " server " attributi. Se rimuovo id e runat = & Quot; server & Quot; dalla riga trPickFromList2 si lega correttamente.
Qualche idea?
<table id="tblOptions" runat="server">
<tr id="trPickFromList1" runat="server">
<td>
<asp:RadioButton ID="rbFromList" runat="server" GroupName="Selection"
Text="Get Data From Existing Item" AutoPostBack="True"
oncheckedchanged="rbromList_CheckedChanged" />
</td>
</tr>
<tr id="trPickFromList2" runat="server">
<td style="padding-left:20px">
<asp:GridView ID="gvList" runat="server" AutoGenerateColumns="False"
DataSourceID="odsList" Width="400px" onrowdatabound="gvList_RowDataBound">
<Columns>
...
</Columns>
</asp:GridView>
</td>
</tr>
<tr id="trEnterValue1" runat="server">
<td>
<asp:RadioButton ID="rbEnterValue" runat="server" GroupName="Selection"
Text="Create a New Item"
AutoPostBack="True"
oncheckedchanged="rbEntered_CheckedChanged" />
...
Soluzione
Perché non mostri / nascondi i TR con javascript? In questo modo non avrai questo problema e avrai un'interfaccia utente molto più reattiva.
Con jQuery:
$ ( 'classOnShowRadioButton'). Cliccare (function () { $ ( 'TrToShow') show ().; $ ( 'TrToHide.') Nascondere ().; });
quindi ovviamente fai il contrario per l'altro pulsante di opzione.
Altri suggerimenti
Ho finito per implementare RowSelectorField control di Wilco Bauwer per risolvere questo problema. Non è una soluzione perfetta in quanto il controllo presenta il valore dell'indice della riga selezionata anziché il / i valore / i chiave / e chiave / e dati selezionata; tuttavia, ha funzionato bene.
hmm .. non sono del tutto sicuro, ma qualcosa che mi ha colpito un paio di volte è che AutoWireEvents è impostato su false, è in alto nella <% page /% > sezione. scusate se non è d'aiuto, ma qualcosa di fastidioso e insignificante è probabilmente il problema.
Se AutoWireEvents risponde che Joe ha suggerito che il problema non è il problema, puoi anche provare a rimuovere runat = server dai tag tr, e invece avvolgerli con segnaposto e utilizzare i segnaposto per controllare la visibilità. (Nota, non utilizzare i pannelli, in quanto comporterà HTML non valido)
I notato lo stesso comportamento con un FormView all'interno di un tag TR con runat = " server "
Qualche motivo particolare che stai usando una tabella per il layout? Prova a togliere tutti i controlli dal tavolo e rendi i pulsanti di opzione solo per rendere visibile / invisibile l'attuale GridView.