You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在GridView编辑表单的按钮点击方法中访问ASPxRadioButtonList控件

如何在GridView编辑表单的按钮点击方法中访问ASPxRadioButtonList控件

嘿,我之前也碰到过类似的问题,来帮你梳理下解决思路:

首先得排查几个关键问题,你之前找不到控件大概率是两个原因:控件所在的编辑列被设置为不加载,或者按钮没触发回发导致服务器端方法没正确执行。

第一步:修正按钮的回发设置

你的ASPxButton设置了AutoPostBack="false",这会导致服务器端的Options_Click方法根本不会触发!因为不回发的话,服务器收不到点击事件,自然没法执行代码找控件。先把这个属性改成true:

<dx:ASPxButton ID="ButID" runat="server" RenderMode="Link"
    Text="Options"
    OnClick="Options_Click" AutoPostBack="true" />

第二步:确保RadioButtonList所在的编辑列被加载

你看你RadioButtonList所在的列设置了<EditFormSettings VisibleIndex="10" Visible="false" />,这个Visible="false"会让整个列在编辑表单里不被渲染,服务器端自然找不到这个控件。如果不想让用户看到这个RadioButtonList,别用Visible="false",改用CSS隐藏它:

把列的EditFormSettings改成Visible="true",然后给RadioButtonList套个隐藏的div:

<dx:GridViewDataTextColumn Visible="false" Caption='Report List'>
    <EditFormSettings VisibleIndex="10" Visible="true" />
    <EditItemTemplate>
        <!-- 用CSS隐藏,控件依然会被服务器端加载 -->
        <div style="display: none;">
            <dx:ASPxRadioButtonList ID="radioButLst2" runat="server" RepeatDirection="Horizontal">
                <Items>
                    <dx:ListEditItem Text="Opt1" Value="0" Selected="true" />
                    <dx:ListEditItem Text="Opt2" Value="1" Selected="false" />
                </Items>
            </dx:ASPxRadioButtonList>
        </div>
    </EditItemTemplate>
</dx:GridViewDataTextColumn>

第三步:正确获取RadioButtonList控件

修改完上面的设置后,在Options_Click方法里用下面的方式获取控件,比你之前的方法更可靠:

protected void Options_Click(object sender, EventArgs e)
{
    // 先拿到点击的按钮
    ASPxButton btn = sender as ASPxButton;
    // 通过按钮的命名容器找到GridView的编辑模板容器
    GridViewEditItemTemplateContainer container = btn.NamingContainer as GridViewEditItemTemplateContainer;
    ASPxGridView grid = container.Grid;

    // 查找编辑表单里的RadioButtonList
    ASPxRadioButtonList radioButtonList2 = grid.FindEditFormTemplateControl("radioButLst2") as ASPxRadioButtonList;

    if (radioButtonList2 != null)
    {
        // 这里就可以操作你的单选框列表了
        string selectedVal = radioButtonList2.SelectedValue.ToString();
        // 比如判断选中的是Opt1还是Opt2
        if (selectedVal == "0")
        {
            // 执行Opt1的逻辑
        }
        else
        {
            // 执行Opt2的逻辑
        }
    }
}

另外,如果你想用FindEditRowCellTemplateControl的方式,要注意第一个参数是RadioButtonList所在的列,得用列的Caption或者FieldName来获取,比如:

protected void Options_Click(object sender, EventArgs e)
{
    ASPxGridView grid = myGrid;
    // 通过列的Caption找到对应的列
    GridViewDataColumn radioColumn = grid.Columns["Report List"] as GridViewDataColumn;
    if (radioColumn != null)
    {
        ASPxRadioButtonList radioButtonList2 = grid.FindEditRowCellTemplateControl(radioColumn, "radioButLst2") as ASPxRadioButtonList;
        if (radioButtonList2 != null)
        {
            // 操作控件
        }
    }
}

这样应该就能顺利找到你的RadioButtonList了,试试看!

备注:内容来源于stack exchange,提问作者nnmmss

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 08:52:58