名称不存在(访问id)

时间:2018-01-15 13:06:04

标签: c# asp.net gridview webforms

简短:我可以以某种方式访问​​ID =“imgStackExample”

我尝试向用户提供视觉反馈(例如表格中的图标),它会抛出“名称在当前上下文中不存在”。我需要控制元素的ID来更改Visible prop或CssClass。

<asp:GridView
            ID="GridExample"
            runat="server"
            <Columns>                 
                <asp:TemplateField SortExpression="StackExample">
                    <HeaderTemplate>
                        <asp:LinkButton ID="lbtnStackExample" runat="server" Text="StackExample" OnClick="onChangeHandler" ></asp:LinkButton>
                        <asp:Image ID="imgStackExample" runat="server" ImageUrl="Images/330-sort-alpha-desc.svg"/>
                        <br />    
                        <asp:TextBox ID="txtStackExample" runat="server" OnTextChanged="onChangeHandler" AutoPostBack="true"></asp:TextBox>                                             
                    </HeaderTemplate>
                    <ItemTemplate>
                        <%#Eval("StackExample") %>
                    </ItemTemplate>
                </asp:TemplateField>

这里是来自onChangeHandler的代码

 if (sender is LinkButton)
    {
        LinkButton lBtn = (LinkButton)sender;

        switch (lBtn.ID)
        {
            case "lbtnStackExample":
                //some code
                imgStackExample.Visible = true;//this line here is important
                //some code

我无法在.cs文件中访问ID =“imgStackExample”。如果我使用imgStackExample.Visible = true;,则会抛出错误。

由于

2 个答案:

答案 0 :(得分:0)

您的问题不是很明确,但如果您需要处理来自GridView的按钮点击,您可以使用RowCommand并在那里提取您需要的索引参考图像控制。可以从MSDN

找到一个示例

修改

您已更新问题,因此我更新了我的答案,但仍然可以从提供的链接中找到答案。 图像确实不存在于您尝试引用它的上下文中。为了引用gridview中的控件,您必须使用可以使用来自已知发件人的commandArgument传递的索引来查找它,在本例中为按钮。作为我提供的示例中的状态:

int index = Convert.ToInt32(e.CommandArgument);
// Retrieve the row that contains the button clicked 
// by the user from the Rows collection.
 GridViewRow row = ProductsGridView.Rows[index];

然后您可以访问GridView中的控件,例如

Label listPriceTextBox = (Label)row.FindControl("PriceLabel"); 

这当然假设您已将索引添加为按钮的命令参数,或者您可以从按钮的ID获取索引。

答案 1 :(得分:0)

访问templatefield内的gridview,请按照以下代码

foreach (GridViewRow row in grd.Rows)
    {
        var txt = row.FindControl("txtStackExample") as TextBox;
         if (txt != null)
         {
           // do something with your textbox
         }
     }

针对event使用button gridview创建RowCommand event

 protected void GridExample_RowCommand(object sender,GridViewCommandEventArgs e)
 {
    if (e.CommandName == "lbtnStackExample")
   {
    LinkButton lnkbtn = (LinkButton)e.CommandSource;
    string Id= lnkbtn.CommandArgument;
  // write link button click event code here
   }
 }