- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用名为 RadGrid 的 Telerik Web 组件,该组件与 Asp.Net ObjectDataSource 绑定(bind)。它允许将绑定(bind)数据导出为 Excel/PDF/Word 格式。问题是文件下载完成后我无法触发 JavaScript 警报。我已经在 Javascript 上尝试过 OnResponseEnd 方法,但它不起作用。
有什么建议吗?
这是迄今为止我的代码隐藏代码。
protected void bXls_Click(object sender, EventArgs e)
{
RadGrid1.MasterTableView.GetColumn("Historico").Visible = false;
RadGrid1.MasterTableView.GetColumn("TareaIdExport").Visible = true;
RadGrid1.ExportSettings.IgnorePaging = true;
RadGrid1.ExportSettings.OpenInNewWindow = false;
RadGrid1.MasterTableView.ExportToExcel();
}
以及组件代码的简短版本
<telerik:RadGrid ID="RadGrid1" runat="server"
AutoGenerateColumns="False"
Culture="es-ES"
GroupPanelPosition="Top" DataSourceID="objGrid"
OnItemCommand="RadGrid1_ItemCommand"
OnItemDataBound="RadGrid1_ItemDataBound"
RenderMode="Lightweight"
OnPreRender="RadGrid1_PreRender1"
AllowFilteringByColumn="True"
AllowPaging="True"
AllowSorting="True"
OnItemCreated="RadGrid1_ItemCreated"
PageSize="4"
OnGridExporting="RadGrid1_GridExporting"
OnPdfExporting="RadGrid1_PdfExporting">
</telerik:RadGrid>
最佳答案
由于导出需要完整的回发,因此不能使用 ajax 来限制从帖子返回的内容。这使得处理整个事件变得困难。您可以做的是使用将从导出的完整回发中返回的 cookie。以下教程使用此方法来解决导出期间显示 AjaxLoadingPanel 的类似问题。
解决方案总结如下。导出完成后,服务器端的 cookie 将添加到表单中。同时,客户端正在轮询并寻找此 cookie。当客户端找到cookie时,表示导出完成。
Show loading panel when exporting RadGrid
以下是根据您的场景调整的代码工作示例:
ASPX:
function gridCommand(sender, args) {
if (args.get_commandName().startsWith("Export")) {
//initiate cookie polling
appendDownloadToken();
}
}
function appendDownloadToken() {
window._downloadToken = new Date().getTime() + "";
//add a form field containing the download token before submit
$telerik.$("<input type='hidden' id='_downloadToken' name='_downloadToken' value='" + window._downloadToken + "' />").appendTo(document.forms[0]);
pollDownloadCookie();
}
function pollDownloadCookie() {
//compare cookie value and initial value
if (cookie.get("_downloadToken") === window._downloadToken) {
//erase download token cookie
cookie.erase("_downloadToken");
//remove the token value
delete window._downloadToken;
//remove the form field
$telerik.$("#_downloadToken").remove();
//show alert
alert('Grid Exported');
} else {
setTimeout(pollDownloadCookie, 100);
}
}
//Helper method to deal with cookies
cookie = {
get: function(name) {
var part = document.cookie.split(name + "=")[1];
return part ? decodeURIComponent(part.split(";")[0]) : null;
},
set: function(name, value, days, path, secure) {
document.cookie = [
name + "=" + encodeURIComponent(value),
days ? "expires=" + new Date(new Date().getTime() + (days * 24 * 60 * 60 * 1000)).toUTCString() : "",
secure ? "secure" : "",
path ? "path=" + path : "path=/"
].join("; ");
},
erase: function(name) {
cookie.set(name, "", -1);
},
all: function() {
var ret = {};
var arr = document.cookie.split(";");
for (var i = 0; i < arr.length; i++) {
if (arr[i]) {
var pair = arr[i].split("=");
ret[pair[0]] = decodeURIComponent(pair[1]);
}
}
return ret;
}
}
<telerik:RadGrid ID="RadGrid1" runat="server" OnNeedDataSource="RadGrid1_NeedDataSource" AutoGenerateColumns="false" OnItemCommand="RadGrid1_ItemCommand">
<ExportSettings ExportOnlyData="True" HideStructureColumns="True" OpenInNewWindow="True"></ExportSettings>
<ClientSettings>
<ClientEvents OnCommand="gridCommand" />
</ClientSettings>
<MasterTableView DataKeyNames="ID" CommandItemDisplay="Top">
<CommandItemSettings ShowExportToExcelButton="true" ShowExportToCsvButton="true" ShowExportToPdfButton="true" ShowExportToWordButton="true" />
<Columns>
<telerik:GridBoundColumn UniqueName="Id" DataField="ID" HeaderText="ID"></telerik:GridBoundColumn>
<telerik:GridBoundColumn UniqueName="Name" DataField="Name" HeaderText="Name"></telerik:GridBoundColumn>
</Columns>
</MasterTableView>
</telerik:RadGrid>
C#:
protected void RadGrid1_NeedDataSource(object sender,
GridNeedDataSourceEventArgs e)
{
DataTable table = new DataTable();
table.Columns.Add("ID", typeof(int));
table.Columns.Add("Name");
for (int i = 1; i <= 5; i++) {
table.Rows.Add(i, "Name" + i.ToString());
}
RadGrid1.DataSource = table;
}
protected void RadGrid1_ItemCommand(object sender, GridCommandEventArgs e)
{
if (e.CommandName.StartsWith("Export")) {
if (!String.IsNullOrEmpty(Request("_downloadToken"))) {
Response.Cookies.Add(new HttpCookie("_downloadToken",
Request("_downloadToken")));
}
}
}
关于javascript - 显示有关导出完整 RadGrid Telerik Web 组件的数据的 javascript 警报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45153342/
将 RadGrid 用于 Asp.Net Ajax(来自 Telerik) 我需要重新设置 CurrentPageIndex。 Some examples说下一行代码应该是 myGrid.Rebind
Telerik Rad 控件在浏览器中仅显示为实线。但在 Visual Studio 设计中它显示正确。 There are no records to display
当我单击添加记录按钮时,我希望其中一列具有默认值。我如何在后面的代码中做到这一点?它是一个动态日期并且可以一直更改? 最佳答案 如果该列不是 GridTemplateColumn ,您可以使用列的 D
我正在尝试设置一个切换开关,以便用户可以将对象列表用作待办事项列表。我正在寻找一种用户可以单击一行的方法,并且它将跨度从一个字体图标切换到另一个字体图标。我还希望根本不访问服务器。 目前我有这个 Ja
我有一个使用 OnNeedDataSource 动态加载数据的 Telerik RadGdir。绑定(bind)所有数据后,我想使用 PreRender 事件添加一个页脚行,该行将包含描述网格数据的文
在their documentation Telerik 说有一种方法可以通过使用 AllowSorting 属性来禁用特定列的排序。我在看 Telerik.Web.UI.GridColumn mem
我有一个简单的辐射网格。当我单击“添加记录”时它会弹出一个插入模板,它会以垂直格式显示表单,我想更改它以使其以水平格式显示吗?我该怎么做? protected void Page_Load(objec
我想要 RADGRID 中的复选框。详细要求如下: 我正在使用存储过程中的 AutoGenerateColumns="True"填充所有 radgrid 列。我需要一个额外的复选框列。 在网格加载期间
我在使用 telerik radgrid 控件时遇到问题。当网格处于编辑模式时,我正在尝试使用 javascript 访问文本框。 我的代码如下所示:
我有一些嵌套的 div,其中一个包含需要填充其容器的 Radgrid 控件。 尝试了 100% 高度/宽度。没用。 试过绝对定位。没用。 遵循 Telerik 的建议 here .不。 按照这个pos
我有一个 radgrid asp.net 控件,我在其中编辑服务器端的行。我想在客户端知道用户是否在保存/放弃网格中的更改之前尝试关闭屏幕。 我找到了一些关于如何使用 get_masterTableV
我的 radgrid (RAD13) 有这个手动更新代码。上传时它有效,但问题是只有网格中的第一行保存它的更新。 我认为我应该传递一个自动递增的值来遍历行 protected void UpdateB
我有一个 RadGrid,它有一个像这样的列: /> /> 我想对其进行设置,以便此列在插入新值时允许输入,但在更新值时
我需要在 Telerik RadGrid Row Double Click 上触发客户端事件,并通过单击从服务器获取更新。但是双击事件不起作用。如果我删除“EnablePostBackOnRowCli
我可以根据后面代码中的数据为每列创建不同的控件,并且它可以工作。 我想在代码后面的每一行创建不同的控件。示例: ColumnA ColumnB
我在页面上有一个 RadGrid,当您单击该行时会回发,配置如下: 我试图通过以下方式停止事件的传播来停止回发: function RowClick(sender, e) {
我正在使用 RadGrid 从数据库中检索数据。我的 RadGrid 中有更多列,因此我需要显示 RadGrid 水平滚动以防止页面展开但禁用垂直滚动以便网格的高度应该展开以始终显示网格中的所有行。我
如何将代码中的“DurationType”列设置为下拉菜单? 我已经修改了代码以展示如何创建模板和添加下拉菜单。但我不知道如何获取下拉列表的值,因为它只显示在插入/编辑模板中,而不是常规网格中。 pr
我有一个 RadGrid,其中我想创建的列数未知。其实我知道第一列,它有一个数据字段PermissionName。我有一个 CSLA 数据源,它返回一个 PermissionInfo 对象列表,每个对
我需要在某些列上创建一个包含多个组的网格,我的代码是
我是一名优秀的程序员,十分优秀!