在 Telerik RadGrid 中单击复选框打开对话框 window
Open dialog window on checkbox click in Telerik RadGrid
我有一个带有 GridTemplate 列的 Telerik RadGrid,其中有一个 asp:CheckBox。我选择使用 GridTemplate 列而不是 GridCheckBoxColumn 或 ClientSelectColumn,因为我希望用户能够选中该框,如果选中该复选框,则单击该复选框会打开一个对话框 window,以便他们将附件上传到记录.我不确定如何在网格内单击复选框时打开 RadWindow。
我要实现的总体目标如下:
我有一个看起来像清单的网格。如果用户连续选中该复选框,则意味着他们必须为其上传文档,因此将打开一个对话框 window,其中包含一个小的上传表单。一旦他们点击保存,window 将关闭并且网格将与 link 重新绑定以查看下一栏中的附件。如果有人有更好的工作流程,我愿意接受建议,否则任何关于如何做这样的事情的建议都将不胜感激。
您可以使用带有选中或未选中图像的图像按钮来伪造复选框点击,具体取决于您需要的状态(只需找到图像图标)。您还可以使用带有各种状态复选框的字体的链接按钮。
然后您可以使用命令事件,它将冒泡到 radgrid 的命令事件。这也让您可以设置命令参数来表示您需要哪一行或其他数据。将其推入 属性 中,例如由 viewstate 变量支持的 SelectedItem,这样它将持续存在,您可以将 window 的 VisibleOnPageLoad 设置为 true。
至于打开 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 以及您可能需要填写的其他控件,从而避免必须获取所有内容将输入关联到记录的引用。
我有一个带有 GridTemplate 列的 Telerik RadGrid,其中有一个 asp:CheckBox。我选择使用 GridTemplate 列而不是 GridCheckBoxColumn 或 ClientSelectColumn,因为我希望用户能够选中该框,如果选中该复选框,则单击该复选框会打开一个对话框 window,以便他们将附件上传到记录.我不确定如何在网格内单击复选框时打开 RadWindow。
我要实现的总体目标如下:
我有一个看起来像清单的网格。如果用户连续选中该复选框,则意味着他们必须为其上传文档,因此将打开一个对话框 window,其中包含一个小的上传表单。一旦他们点击保存,window 将关闭并且网格将与 link 重新绑定以查看下一栏中的附件。如果有人有更好的工作流程,我愿意接受建议,否则任何关于如何做这样的事情的建议都将不胜感激。
您可以使用带有选中或未选中图像的图像按钮来伪造复选框点击,具体取决于您需要的状态(只需找到图像图标)。您还可以使用带有各种状态复选框的字体的链接按钮。
然后您可以使用命令事件,它将冒泡到 radgrid 的命令事件。这也让您可以设置命令参数来表示您需要哪一行或其他数据。将其推入 属性 中,例如由 viewstate 变量支持的 SelectedItem,这样它将持续存在,您可以将 window 的 VisibleOnPageLoad 设置为 true。
至于打开 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 以及您可能需要填写的其他控件,从而避免必须获取所有内容将输入关联到记录的引用。