2010-10-25 6 views
1

J'ai un GridView comme celui-ciAccès aux données d'un BoundField de Gridview

<asp:GridView ID="gv_FilesList" runat="server" AutoGenerateColumns="false" onrowcommand="gv_FilesList_RowCommand"> 
    <Columns> 
    <asp:BoundField DataField="f_Id" Visible="false" HeaderText="File Name" /> 
    </Columns> 
    <Columns> 
    <asp:BoundField DataField="f_Name" HeaderText="File Name" /> 
    </Columns>          
    <Columns> 
    <asp:ButtonField ButtonType="Link" Text="Download" CommandName="DownloadFile" HeaderText="Download" /> 
    </Columns> 
</asp:GridView> 

Maintenant, quand je clique sur le bouton de téléchargement, comment puis-je obtenir le correspondant F_ID afin d'obtenir les données connexes de la base de données.

Répondre

4

Ce code devrait fonctionner, testé sur mon local. Pour commencer, ajoutez DataKeyNames à votre GridView.

<asp:GridView ID="gv_FilesList" runat="server" AutoGenerateColumns="false" onrowcommand="gv_FilesList_RowCommand" DataKeyNames="f_Id"> 
    <Columns> 
    <asp:BoundField DataField="f_Id" Visible="false" HeaderText="File Name" /> 
    </Columns> 
    <Columns> 
    <asp:BoundField DataField="f_Name" HeaderText="File Name" /> 
    </Columns>          
    <Columns> 
    <asp:ButtonField ButtonType="Link" Text="Download" CommandName="DownloadFile" HeaderText="Download" /> 
    </Columns> 
</asp:GridView> 

Ensuite, l'accès DataKeys de codebehind.

protected void gv_FilesList_RowCommand(object sender, GridViewCommandEventArgs e) 
{ 
    if (e.CommandName == "DownloadFile") 
    { 
     //row index 
     int index = Convert.ToInt32(e.CommandArgument); 

     //retrieve f_Id  
     int f_Id = Convert.ToInt32(gv_FilesList.DataKeys[index].Value); 

     //download file with f_Id 
     DownloadFile(f_Id); 
    } 
} 
+0

Exactement ce dont j'avais besoin, et cela a fonctionné tout de suite! – Marcel

0

Une solution à votre problème est décrite in this thread. Fondamentalement, vous pouvez accéder à l'index de ligne dans la propriété d'argument d'événement appelée CommandArgument.

2

deux façons de la peau, mais vous pouvez y accéder comme ci-dessous:

void gv_FilesList_RowCommand(Object sender, GridViewCommandEventArgs e) { 
    if(e.CommandName=="DownloadFile") 
    int index = Convert.ToInt32(e.CommandArgument); 
    GridViewRow row = gv_FilesList.Rows[index]; 
    string fileDownloadId = row.Cells[1].Text; 
    //Pull from DB 
} 

Et puis ajoutez F_ID, à l'DataKeyNames attribut il stockera la valeur des champs cachés.

<asp:GridView ID="gv_FilesList" runat="server" AutoGenerateColumns="false" onrowcommand="gv_FilesList_RowCommand" DataKeyNames="f_id"> 

DataKeyNames

+0

Mais cela ne fonctionnera pas si j'ai Visible = "false". Et je ne veux bien sûr pas montrer le f_id dans le gridview. –

+0

Mettez à jour votre gridview et ajoutez f_id à l'attribut "DataKeyNames" voir ci-dessus. C'est un joli petit hack qui va lui faire stocker la variable cachée. – Nix

Questions connexes