好些天都在糊裡糊塗,最近也比較懶,居然看到了個留言,永遠不更新的部落格一等獎,相當尷尬,哈哈。寫一些最近自己或別人遇到的小問題吧。
1、關於updatepanel註冊js
最近在項目裡需要用到altas,本人也是新手,老用最簡單的updatepanel,在註冊指令碼時也遇到了困難,無法註冊。本來是在updatepanel中放了一個gridview,偶想在girdview中一個模板列點擊彈出一個表單,註冊window.open()來解決問題。本來不是在updatepanel中,所以用ClientScript.RegisterStartupScript直接註冊挺好使。
在拖入updatepanel後發現無法註冊指令碼,想想RegisterStartupScript本來是在頁面載入時啟動js的,在updatepanel中部分重新整理,肯定是無法註冊的。
後來發現了ScriptManager.RegisterStartupScript方法,挺好使,呵呵。
ScriptManager.RegisterClientScriptBlock(UpdatePanelName, typeof(UpdatePanel), "標識key", "指令碼", true);
下面是一個demo,模板列定義如下:
<asp:TemplateField HeaderText="客戶ID">
<ItemTemplate>
<asp:LinkButton ID="linkbtnCID" runat="server" Text='<%# Eval("CID") %>' CommandName="linkbtnCID" > </asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
在GridView對應的RowCommand事件中如下操作:
protected void gvClientInfo_RowCommand(object sender, GridViewCommandEventArgs e)
{
//如果是linkButton被點擊
if(e.CommandName.Equals("linkbtnCID"))
{
LinkButton lbtn = (LinkButton)e.CommandSource;
GridViewRow dgRow = (GridViewRow)lbtn.Parent.Parent;
string tmpText = lbtn.Text.ToString();
tmpText ="window.open('customerDetailsInfo.aspx?CID=" + tmpText + "' ,'newwindow','height=550,
width=700, menubar=no ')";
ScriptManager.RegisterStartupScript(this.UpdatePanel2, this.GetType(), "click", tmpText, true);
}
}
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]);