我正在创建一个打印功能,关键是调用我想要打印的网格。如果网格存在于aspx页面上,它一直运行良好,直到我还需要打印在代码后面以编程方式生成的RadGrids列表,然后JavaScript无法检测到这些不存在的网格并返回“控件”的错误不存在”。只是要清楚,它不起作用,因为在我输入代码时,页面上没有RadGrid_Dynamic,因此出错。与页面执行/页面生命周期等无关。
我的工作是尝试按字符串值调用控件,如使用
$find('<%= RadGrid_Dynamic.ClientID %>')
,
页面将突出显示RadGrid_Dynamic并说它不存在,如上所述。以下是我的代码,我也尝试用$find()
替换document.getElementById()
,但没有运气,有什么建议吗?感谢。
function getOuterHTML(obj) {
if (typeof (obj.outerHTML) == "undefined") {
var divWrapper = document.createElement("div");
var copyOb = obj.cloneNode(true);
divWrapper.appendChild(copyOb);
return divWrapper.innerHTML
}
else {
return obj.outerHTML;
}
}
function Print() {
var previewWindow = window.open('about:blank', '', '', false);
var styleSheet = '<%= Telerik.Web.SkinRegistrar.GetWebResourceUrl(this, RadGrid1.GetType(), String.Format("Telerik.Web.UI.Skins.{0}.Grid.{0}.css", RadGrid1.Skin)) %>';
var baseStyleSheet = '<%= Telerik.Web.SkinRegistrar.GetWebResourceUrl(this, RadGrid1.GetType(), "Telerik.Web.UI.Skins.Grid.css") %>';
var htmlContent = "<html><head><link href = '" + styleSheet + "' rel='stylesheet' type='text/css'></link>";
htmlContent += "<link href = '" + baseStyleSheet + "' rel='stylesheet' type='text/css'></link></head><body>";
for (i = 1; i < 13; i++) {
var CYGrid = "RadGrid_CY_Strategy_" + String(i);
var CYradGrid = $find('<%=CYGrid.ClientID %>'); //Highlighted as red and erorr: The Name 'CYGird' does not exist in the current content
var LYGrid = "RadGrid_LY_" + String(i);
var LYradGrid = $find('<%=LYGrid.ClientID %>'); //Ditto
htmlContent += getOuterHTML(CYradGrid.get_element());
if (LYradGrid.hidden == false) {
htmlContent += getOuterHTML(LYradGrid.get_element());
}
}
htmlContent += "</body></html>";
previewWindow.document.open();
previewWindow.document.write(htmlContent);
previewWindow.document.close();
previewWindow.print();
if (!$telerik.isChrome) {
previewWindow.close();
}
}
答案 0 :(得分:0)
您可以在动态网格创建时以编程方式为其分配ID,并使用该ID执行$find()
。