最近在项目里 需要用到altas,本人也是新手,老用最简单的updatepanel,在注册脚本时也遇到了困难,无法注册。本来是在updatepanel中放了一 个gridview,偶想在girdview中一个模板列点击弹出一个窗体,注册window.open()来解决问题。本来不是在 updatepanel中,所以用ClientScript.RegisterStartupScript直接注册挺好使。
在拖入updatepanel后发现无法注册脚本,想想RegisterStartupScript本来是在页面加载时启动js的,在updatepanel中部分刷新,肯定是无法注册的。
后来发现了ScriptManager.RegisterStartupScript方法,挺好使,呵呵。
ScriptManager.RegisterClientScriptBlock(UpdatePanelName, typeof(UpdatePanel), "标识key", "脚本", true);
下面是一个demo,模板列定义如下
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
Code
1
<asp:TemplateField HeaderText="客户ID">
2
3
<ItemTemplate>
4
5
<asp:LinkButton ID="linkbtnCID" runat="server" Text='<%# Eval("CID") %>' CommandName="linkbtnCID" > </asp:LinkButton>
6
7
</ItemTemplate>
8
9
</asp:TemplateField>
10
11
在GridView对应的RowCommand事件中如下操作:
12
13
protected void gvClientInfo_RowCommand(object sender, GridViewCommandEventArgs e)
14
15![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
{
16
17
//如果是linkButton被点击
18
19
if(e.CommandName.Equals("linkbtnCID"))
20
21![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
22
23
LinkButton lbtn = (LinkButton)e.CommandSource;
24
25
GridViewRow dgRow = (GridViewRow)lbtn.Parent.Parent;
26
27
string tmpText = lbtn.Text.ToString();
28
29
tmpText ="window.open('customerDetailsInfo.aspx?CID=" + tmpText + "' ,'newwindow','height=550,
30
31
width=700, menubar=no ')";
32
33
ScriptManager.RegisterStartupScript(this.UpdatePanel2, this.GetType(), "click", tmpText, true);
34
35
}
36
37
}
2、关于RegisterStartupScript,RegisterClientScriptBlock
RegisterStartupScript 将 js嵌入到页面的底部,</form> 的前面
RegisterClientScriptBlock 将 js嵌入到页面中开启元素 <form> 后面
3、关于“该行已经属于另一个表”错误
这个问是出现在不同dataTable之间的行复制出现的问题。
看这个代码:
DataTable tmpdt = sodo.getDataTable("text", strSql, sp);
dt.Rows.Add(tmpdt.Rows[0]);
这个明显的错误就是tmpdt的行是一个对象引用,相当于一个指针,错误是难免的,可有以下解决办法:
DataTable tmpdt = sodo.getDataTable("text", strSql, sp);
1、 dt.Rows.Add(tmpdt.Rows[0].ItemArray);
2、 dt.ImportRow(tmpdt.Rows[0]);