我有一个带有GridTemplate列的Telerik RadGrid,里面有一个asp:CheckBox。我选择使用GridTemplate列而不是GridCheckBoxColumn或ClientSelectColumn,因为我希望用户能够选中复选框并单击复选框(如果选中),打开一个对话框窗口,让他们将附件上传到记录。我不确定如何在网格内点击复选框时打开RadWindow。
我要完成的总体目标如下:
我有一个看起来像清单的网格。如果用户连续选中复选框,则表示他们必须为其上传文档,以便打开一个带有小上传表单的对话窗口。一旦他们点击保存,窗口将关闭,网格将重新绑定链接以查看下一列中的附件。如果有人有更好的工作流程,我愿意接受建议,否则任何关于如何做这样的事情的建议将不胜感激。
答案 0 :(得分:1)
根据您需要的状态(只需找到图像图标),您可以使用带有选中或未选中图像的图像按钮来伪造复选框。您还可以使用链接按钮,其字体具有各种状态的复选框。
然后,您可以使用命令事件,该事件将冒泡到radgrid的命令事件。这也允许您设置命令参数以表示您需要哪些行或其他数据。将它推送到SelectedItem等属性,该属性由视图状态变量支持,因此它将保持不变,您可以将窗口的VisibleOnPageLoad设置为true。
答案 1 :(得分:1)
关于打开RadWindow的命令,我也会采用与Mark提出的类似的方式。没有理由使用复选框作为按钮,因为这是此类控件的功能,您不需要使用其状态而不是命令。
添加按钮列并设置其CommandName="something"
在网格中创建事件itemCommand,在后面的代码中添加这样的内容:
if (e.CommandName == "something")
{
if (e.Item is RadGridDataItem)
{
RadGridDataItem item = e.Item as RadGridDataItem;
string script = "function f(){openRadWindow(); Sys.Application.remove_load(f);}Sys.Application.add_load(f);";
ScriptManager.RegisterStartupScript(Page, Page.GetType(), "key", script, true);
}
}
添加你的JS:
function openRadWindow() {
var radwindow = $find('<%=RadWindow1.ClientID %>');
radwindow.show();
}
添加你的radWindow:
<telerik:RadWindow ID="RadWindow1" VisibleOnPageLoad="false" OnClientClose="//here you can generate the event to rebind your grid and show the update" runat="server" Width="450px" Height="650px" NavigateUrl="Window1.aspx" >
</telerik:RadWindow>
创建页面Window1.aspx并详细说明加载文件的逻辑。
另一种方法,更简单,可以使用edit template form而不是radWindow,并在其中添加asyncUploader以及可能需要填写的其他控件,以避免必须获取所有引用将输入与记录相关联。