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