L'obtention d'un DataRow à partir d'un ASP.NET GridView
J'ai un ASP.NET GridView
qui est lié à un ObjectDataSource
(qui est lié à une base de données MySQL). Sur cette grille, j'ai 2 unbound ButtonField
colonnes que je veux pour déclencher des événements côté serveur. Donc j'ai ajouté un gestionnaire d'événements méthode à la GridView
's RowCommand
événement.
Dans le code de la dit ce gestionnaire, j'ai besoin d'obtenir en quelque sorte tenir du sous-jacent DataRow
qui a été cliqué par l'utilisateur. Cependant, je n'arrive pas à obtenir que cela fonctionne; si j'utilise le code suivant à la selectedRow
variable est toujours null
:
protected void searchResultsGridView_RowCommand(object sender, GridViewCommandEventArgs e)
{
CallDataRow selectedRow = (CallDataRow) searchResultsGridView.Rows[Convert.ToInt32(e.CommandArgument)].DataItem;
}
J'ai Googlé et trouvé des pages telles que http://ranafaisal.wordpress.com/2008/03/31/how-to-get-the-current-row-in-gridview-row-command-event, mais rien de ce que j'ai trouvé a travaillé. Je suis assez sûr que je suis juste en manque de quelque chose d'évident, mais je ne peux pas comprendre ce que...
Voici l'ASP.NET code si ça peut aider:
<asp:GridView ID="searchResultsGridView" runat="server" AutoGenerateColumns="False"
DataKeyNames="PersonNo,CallDate"
Width="100%" AllowPaging="True" EnableSortingAndPagingCallbacks="True"
onrowcommand="searchResultsGridView_RowCommand" PageSize="20">
<Columns>
<asp:BoundField DataField="PersonNo" HeaderText="Account number" ReadOnly="True"
SortExpression="PersonNo" />
<asp:BoundField DataField="AgentNo" HeaderText="Agent number"
SortExpression="AgentNo" />
<asp:BoundField DataField="AgentName" HeaderText="Agent name"
SortExpression="AgentName" />
<asp:BoundField DataField="TelNumber" HeaderText="Telephone number"
SortExpression="TelNumber" />
<asp:BoundField DataField="CallDate" HeaderText="Call date/time" ReadOnly="True"
SortExpression="CallDate" />
<asp:ButtonField CommandName="play" HeaderText="Audio" ShowHeader="True"
Text="Play" />
<asp:ButtonField CommandName="download" Text="Download" />
</Columns>
</asp:GridView>
OriginalL'auteur Ian Kemp | 2009-08-20
Vous devez vous connecter pour publier un commentaire.
Enfin réussi à le faire fonctionner de la manière suivante:
L'ajout d'un TemplateField contenant un lié HiddenField.
Ajoutant le code suivant dans le RowCommand gestionnaire d'événement:
C'est un cludge et il n'est pas très solide, mais ça fonctionne et c'est tout ce dont j'ai besoin maintenant. Toutes les meilleures solutions sont toujours les bienvenus...
OriginalL'auteur Ian Kemp
Je suis même plus tard, à la fête! Mais comme je suis ici, à partir de Google, certaines personnes peuvent encore frapper ce donc je vais vous donner ma réponse:
Alors que vous obtenez peut obtenir l'un des champs de données dans le code-behind.
RowCommand
est PASRowDataBound
?OriginalL'auteur RemarkLima
Je me rends compte c'est de 2,5 ans de retard (désolé! ne l'avais pas vu avant...), mais j'utilise deux statique/méthodes communes pour convertir la ligne directement. C'est peut-être ce que vous cherchez à faire?
VB.Net:
C#.Net (Convertis à l'aide de: http://www.developerfusion.com/tools/convert/vb-to-csharp/):
void GridResultados_RowCommand(Object sender, GridViewCommandEventArgs e)
événementOriginalL'auteur pete
avez-vous essayé en
RowCommand
ouRowDataBound
?OriginalL'auteur Gregoire
Un moyen propre à faire ce qui semble être l'utilisation de la "DataKeyNames" propriété sur le contrôle GridView. La source de données doit contenir une colonne qui est un identifiant unique ou de clé primaire. Vous pouvez ensuite régler le DataKeyNames bien sur la gridview pour être le nom de cette propriété.
La valeur de la colonne correspondant à la ligne sélectionnée est alors disponible dans la RowCommand et il peut être utilisé pour s'assurer que la commande est appliquée à l'unique objet identifié
OriginalL'auteur dancl