如何在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
相关产品推荐
相关产品推荐

