如何从asp.net中的gridview获取控件ID?

时间:2015-02-03 11:09:38

标签: c# asp.net gridview

我需要从网格视图中使用控制ID来使用Trigger。

我的代码在这里:

<asp:GridView ID="gvDetails" CssClass="table table-striped table-bordered datatables dataTable" DataKeyNames="folder_path" CellPadding="5" runat="server" AutoGenerateColumns="false" Width="100%">
    <Columns>
        <asp:TemplateField HeaderText="Select">
            <ItemTemplate>
                <asp:CheckBox ID="chkSelect" runat="server" />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:BoundField DataField="attachment_name" HeaderText="Attachment" />
        <asp:TemplateField>
            <ItemTemplate>
                <asp:LinkButton ID="lnkDownload" Text="Download" runat="server" OnClick="DownloadFile"></asp:LinkButton>
            </ItemTemplate>
        </asp:TemplateField>

        <asp:TemplateField HeaderStyle-CssClass="hideGridColumn" ItemStyle-CssClass="hideGridColumn">
            <ItemTemplate>
                <asp:HiddenField ID="hdnAttach_Id" Value='<%#(Eval("attachment_id").ToString())%>' runat="server" />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
    <HeaderStyle BackColor="#2FBDF1" Font-Bold="true" />
</asp:GridView>

我需要代码......

    <Triggers>           
        <asp:PostBackTrigger ControlID="lnkDownload" />
    </Triggers>

如何从gridview获取“lnkDownload”id?

例外: enter image description here

2 个答案:

答案 0 :(得分:1)

您需要将每个LinkButton注册为PostBackTrigger。在GridView中绑定每一行后,您需要搜索LinkButton并通过代码注册,如下所示:

   protected void gvDetails_RowDataBound(object sender, GridViewRowEventArgs e)  
   {  
       LinkButton lb = e.Row.FindControl("lnkDownload") as LinkButton;  
       ScriptManager.GetCurrent(this).RegisterPostBackControl(lb);  
   } 

需要在RowDataBound事件中调用此方法。

您可以使用findcontrol方法

从网格视图访问控件
  foreach(GridViewRow row in gvDetails.Rows)
  {
     if(row.RowType == DataControlRowType.DataRow)
     {
        LinkButton linkButton = (LinkButton )row.FindControl("lnkDownload");
        //Your other code
     }
  }

答案 1 :(得分:0)

我最近也遇到过这个问题。 您可以通过执行e.row.findcontrol(“NameOfControl”)来查找控件。

由于我不完全知道您打算做什么,因此您可以通过查找控件来检索ClientID。然后,您可以通过说Button.ClientID来指定按钮的ID。这将显示ContentHolder1_gridview_0_button_0。

要添加属性,可以执行button.Attributes.Add(“attribute”,“#”+ button.ClientID);

我修复了以下代码,以便在按钮中添加以下属性。这样我就可以单击按钮并复制文本框。 例如:

protected void gvListInventoryPassword_RowDataBound(object sender, GridViewRowEventArgs e)
{    
    if (e.Row.RowType == DataControlRowType.DataRow)
    {         
        HtmlButton buttonPass= (HtmlButton)e.Row.FindControl("buttonPass");
        TextBox txtBox= (TextBox)e.Row.FindControl("txtBox");
        buttonPass.Attributes.Add("data-clipboard-target", "#" + txtBox.ClientID);
    }
}//End of gvListInventoryPassword_RowDataBound function