【问题标题】:how to find control in gridview如何在gridview中找到控件
【发布时间】:2013-12-02 13:56:39
【问题描述】:

我想在我的 gridview 中访问我的 O1 控件 这是网格视图

<asp:GridView ID="SelectedPollGridView" runat="server" Width="100%" AutoGenerateColumns="False" BackColor="White" BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px" CellPadding="4" DataKeyNames="PollID" DataSourceID="SelectedPollSqlDataSource" ForeColor="Black" GridLines="Horizontal">
                    <Columns>
                        <asp:TemplateField>
                            <HeaderTemplate>
                                <p class="text-center"><small><%#Eval("Header") %></small></p>
                            </HeaderTemplate>
                            <ItemTemplate>
                                <p class="text-right"><%#Eval("Body") %></p>
                                <div  class="text-right">
                                    <div runat="server" id="O1Div" visible='<%#Eval("O1Vis") %>' class="radio ">
                                        <label>
                                            <input class="pull-right" type="radio" name="optionsRadios" id="O1" value="option1">
                                            <%#Eval("O1") %>
                                        </label>
                                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                                    </div>
                                    <div runat="server" id="O2Div" visible='<%#Eval("O2Vis") %>' class="radio">
                                        <label>
                                            <input class="pull-right" type="radio" name="optionsRadios" id="O2" value="option2">
                                            <%#Eval("O2") %>
                                        </label>
                                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                                    </div>
                                    <div runat="server" id="O3Div" visible='<%#Eval("O3Vis") %>' class="radio">
                                        <label>
                                            <input class="pull-right" type="radio" name="optionsRadios" id="O3" value="option3">
                                            <%#Eval("O3") %>
                                        </label>
                                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                                    </div>
                                    <div runat="server" id="O4Div" visible='<%#Eval("O4Vis") %>' class="radio">
                                        <label>
                                            <input class="pull-right" type="radio" name="optionsRadios" id="O4" value="option4">
                                            <%#Eval("O4") %>
                                        </label>
                                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                                    </div>
                                    <asp:Button CssClass="btn btn-info" ID="SubmitPollButton" runat="server" Text="ثبت نظر" OnClick="SubmitPollButton_Click" />
                                </div>
                            </ItemTemplate>
                        </asp:TemplateField>
                    </Columns>

                </asp:GridView>

我正在使用此代码访问它:

protected void SubmitPollButton_Click(object sender, EventArgs e)
    {
        System.Web.UI.HtmlControls.HtmlGenericControl O1Radio = (System.Web.UI.HtmlControls.HtmlGenericControl)SelectedPollGridView.Rows.FindControl("O1");
        if (O1Radio.Attributes["checked"] == "checked")
        {
            Response.Redirect("somewhere");
        }            

    }

但它不起作用。 有谁能够帮我? 在我的gridview 中只有一个模板字段。这是否意味着我只有一行和一个单元格?

非常感谢。

【问题讨论】:

  • 你想通过什么方法获得控制权?
  • System.Web.UI.HtmlControls.HtmlGenericControl O1Radio = (System.Web.UI.HtmlControls.HtmlGenericControl)SelectedPollGridView.Rows[0].FindControl("O1");
  • 添加runat="server"标签:&lt;input class="pull-right" runat="server" ...
  • 是的,但是,这段代码在哪个方法中呢?方法是在事件 submitPollButton_Click?如果是这样,你可以得到发件人。
  • 。它在模板字段的最后一行

标签: c# asp.net gridview controls


【解决方案1】:

您需要处理 gridview 上的 RowCommand 事件,因为按钮单击事件会冒泡到 gridview 控件。

<asp:GridView id="GridView1" AutoGenerateColumns="false"
    OnRowCommand="OnGridRowCommand" runat="server">
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:Button ID="btn" 
                    CommandArgument="<%# Eval("ID") %>" 
                    Text="Click" CommandName="foo" runat="server"/>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

后面的代码:

protected void OnGridRowCommand(object sender, GridViewEventArgs e)
{
    //e.CommandSource - reference to the button
    //e.CommandName - the command name, in this case foo
    //e.CommandArgument - use it to find which row the button click originated from


}

现在,如果您要查找其他控件,请执行以下操作:

System.Web.UI.HtmlControls.HtmlGenericControl O1Radio =
   (System.Web.UI.HtmlControls.HtmlGenericControl)
      ((Button)e.CommandSource).Parent.FindControl("O1");

【讨论】:

  • 我是 asp.net 的新手。非常感谢您的回答。我想我必须尝试这几个小时才能得到答案。
  • 如果我想对单选按钮使用自动回发并删除按钮怎么办?非常感谢
  • @afzalulh 我的坏修好了
  • CommandSource 属性是对象类型。因此,您需要将其转换为 Control。它将具有您在 UI 中单击的按钮的引用。我将编辑代码...
  • 如果您使用Control.Parent.Parent... ...etc 向上遍历控制树,您最终将找到对网格视图行对象的引用。 (您只需在调试模式下中断代码并使用即时窗口查找)。CommandArgument 用于标记任何与数据相关的项目,例如,如果我的网格绑定到北风客户表,那么我'd 将 CustomerID 标记到 CommandArgument,所以在代码中我知道我必须对哪个客户采取行动......希望你明白。
猜你喜欢
  • 2013-10-10
  • 2011-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多