2008年4月9日 星期三

如何在 aspx 的 datagrid 中呼叫Javascript function並傳參數

如何在 aspx 的 datagrid 中呼叫Javascript function並傳參數:

1. 先在datagrid (.aspx) 的方法中定義:
(使用 OnItemDataBound 方法以提供 ItemDataBound 事件的自訂處理常式).

...
<asp:datagrid id="grdResults" runat="server" OnItemDataBound="Item_Bound"
...
<asp:TemplateColumn SortExpression="rma_ioutno" HeaderText="Sales Slip">
<HeaderStyle HorizontalAlign="Center"></HeaderStyle>
<ItemStyle HorizontalAlign="Center"></ItemStyle>
<ItemTemplate>
<asp:HyperLink id="xxx" STYLE='cursor:hand' runat="server" ImageUrl="../images/html.gif"></asp:HyperLink>
<asp:textbox runat="server" Width="90px" Text='<%# Container.DataItem("field_no") %>' ID="field_no" />
</ItemTemplate>
</asp:TemplateColumn>
...


2. Item_Bound() 自訂處理常式(.aspx.vb):

Sub Item_Bound(ByVal sender As Object, ByVal e As DataGridItemEventArgs)
Dim Hk As System.Web.UI.WebControls.HyperLink
Hk = CType(e.Item.FindControl("xxx"), HyperLink)
Dim TXTsn As System.Web.UI.WebControls.TextBox
TXTsn = CType(e.Item.FindControl("field_sno"), TextBox)
Dim TXTio As System.Web.UI.WebControls.TextBox
TXTio = CType(e.Item.FindControl("field_no"), TextBox)
Dim vsn As String = "zzz"
Dim vio As String = "zzz"
If Not (IsNothing(TXTsn)) Then
vsn = TXTsn.ClientID
End If
If Not (IsNothing(TXTio)) Then
vio = TXTio.ClientID
End If
If Not (IsNothing(Hk)) Then
Hk.Attributes.Add("onclick", "atrun(" & e.Item.ItemIndex + 1 & ",'" & vsn & "'," & vio & ")")
End If
End Sub


3. 回到.aspx中寫下Javascript atrun() function:

function atrun(v_itxt, x2, x3) {
var v_cus = document.frmServer.txtcus.value;
var v_pno = escape(grdResults.rows(v_itxt).cells(3).innerText);
var v_sno = document.frmServer.elements(x2).value;
seekiout(v_cus, v_pno, v_sno, x3.id);
}
function seekiout(v_cus, v_pno, v_sn, v_itxt) {
if (v_cus && v_pno) {
popwin = window.open('ioseek.aspx?v_cus='+v_cus+'&v_pno='+v_pno+'&v_sn='+v_sn+'&v_itxt='+v_itxt,'popwin','scrollbars=yes,width=500,height=600');
popwin.focus();
} else {
alert("Customer or Product empty!!");
}
}


如此便可以在datagrid中點選超連結另開ioseek.aspx視窗,
並傳入該行不同欄位資料給ioseek.aspx視窗.

沒有留言: