2016-03-07 2 views
1

Gridview est configuré:Obtenir la valeur DataKey dans ASP.NET GridView événement commande Bouton

<asp:GridView ID="gvApptList" runat="server" CssClass="fullwidth" AutoGenerateColumns="False" DataKeyNames="AppointmentID"> 
       <Columns> 
        <asp:BoundField DataField="Designer" HeaderText="Designer" SortExpression="Designer" /> 
        <asp:BoundField DataField="AppointmentDTM" HeaderText="Appointment Date" SortExpression="AppointmentDTM" DataFormatString="{0:MM-dd-yyyy hh:mm tt}" /> 
        <asp:BoundField DataField="Status" HeaderText="Status" SortExpression="Status" /> 
        <asp:BoundField DataField="Disposition" HeaderText="Disposition" SortExpression="Disposition" /> 
        <asp:BoundField DataField="AppointmentNotes" HeaderText="Appointment Notes" SortExpression="AppointmentNotes" /> 
        <asp:ButtonField ButtonType="Button" CommandName="viewAppointment" Text="View" /> 
       </Columns> 
      </asp:GridView> 

Lorsque je clique sur le bouton "View", le gvApptList_RowCommand Déclenché. COde car il est:

If e.CommandName = "viewAppointment" Then 
     Dim tApptID As Long 
     gvApptList.SelectedIndex = e.CommandArgument 
     If IsNumeric(gvApptList.DataKeys(e.CommandArgument).Value) Then 
      tApptID = gvApptList.SelectedDataKey.Value 
     Else 
      Exit Sub 
     End If 
     tbAppointmentID.Text = tApptID 
     DisplayInfo() 
    End If 

Les gvApptList.DataKeys (e.CommandArgument) .Value revient toujours rien. Qu'est-ce que j'oublie ici? J'ai ce code de vente exact sur d'autres pages.

+0

Vous ne devez pas avoir le DataKeyName en tant que DataField lié? – Kramb

+0

J'ai essayé cela aussi. – RobWaibel

+0

AppointmentID est-il inclus dans votre requête SELECT sous-jacente? En outre, où est la source de données et le code de liaison? Cordialement, –

Répondre

0

Pertinent à votre tâche, la syntaxe correcte à l'aide DataKeys dans le contrôle ASP.NET GridView est illustré ci-dessous (re: http://www.codeproject.com/Tips/225352/Nesting-GridView-control-in-ASP-NET, écrit en C#):

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
    // get data key from selected row 
    s.SelectParameters[0].DefaultValue =Convert.ToString(((GridView)sender).DataKeys[e.Row.RowIndex].Values["AppointmentID "]); 
    } 
} 

Vous devriez obtenir la référence au correspondant la commande Button a cliqué, puis extrayez la valeur DataKeys de cette . Assurez-vous également que le champ DataSource sous-jacent contient le champ AppointmentID dans sa requête SELECT.

Pertinent à votre cas, il peut ressembler à ce qui suit (voir la liste 2)

Listing 2.

protected void ViewButton_OnClick(object sender, EventArgs e) 
{ 
    Button btn = sender as Button; 
    GridViewRow row = btn.NamingContainer as GridViewRow; 
    string strID = gvApptList.DataKeys[row.RowIndex].Values["AppointmentID"].ToString(); 

    int intID; 
    if (String.IsNotNullOrEmpty(strID) 
    { 
     intID = int.Parse(strID); 
    } 
} 

ou vous pouvez utiliser TryParse(), Convert(), etc.

Hope this peut Aidez-moi.

+0

Je ne suis pas en train d'imbriquer la grille. Affiche les informations de rendez-vous lisibles par l'utilisateur. – RobWaibel

+0

L'imbrication n'est pas pertinente pour votre cas, référez-vous simplement à l'extrait de code principal, et incluez également le bloc de code complet pour ce gestionnaire d'événements que vous utilisez (bouton de commande clic). Meilleures salutations, –