双击子窗口中的行,自增到父窗口中新增一个行(vb.net)

本文介绍如何在ASP.NET应用程序中使用Html控件实现父子窗口间的交互,具体包括通过客户端脚本触发服务器端事件的方法,以及如何在子窗口中选择数据并返回给父窗口。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1, 在父窗口中增加两个Html控件

<input type=”submit” onclick=”SelInv()” value=”增行”>

<input type=”hidden” id=”TxInv” name=”TxInv” runat=”server”> 这个是运行于服务端的Html控件,且它的类型为“隐藏”,使用它的目的就是用它做一个中转

其中的脚本如下:(加入到父窗口中的html视图中)

<script language="javascript">

var vDialog=null;

function SelInv()

{

vDialog=showModalDialog("cSmallInv.aspx?invname=",window,"status:no;resizable:yes;dialogHeight:500px;dialogWidth:500px;unadorne:yes");

if (vDialog != null) vDialog.CusName2.value="";

}

</script>

2, TxInv在代码视图中添加ServerChanged事件,如下:

Private Sub TxInv_ServerChange(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TxInv.ServerChange

Dim ProDTb As DataTable = viewstate("ProDTb")

ProDTb.Rows.Clear() //删除viewstate中所有的行

Dim item As RepeaterItem

Dim myDataRow As DataRow

Dim i As Integer = 0

For Each item In Repeater1.Items// 循环得到repeater控件中的所有数据,并储存到DataTable

i = i + 1

myDataRow = ProDTb.NewRow()

myDataRow.Item("AutoId") = i

myDataRow.Item("产品编号") = CType(item.FindControl("ProName"), TextBox).ToolTip

myDataRow.Item("产品名称") = CType(item.FindControl("ProName"), TextBox).Text.Trim

myDataRow.Item("零售价") = CType(item.FindControl("lsPrice"), Literal).Text.Trim

myDataRow.Item("供价") = CType(item.FindControl("GjPrice"), Literal).Text.Trim

myDataRow.Item("iNum") = CType(item.FindControl("iNum"), TextBox).Text.Trim

myDataRow.Item("iMoney") = CType(item.FindControl("iMoney"), Literal).Text.Trim

myDataRow.Item("Week1") = CType(item.FindControl("Week1"), TextBox).Text.Trim

myDataRow.Item("Week2") = CType(item.FindControl("Week2"), TextBox).Text.Trim

myDataRow.Item("Week3") = CType(item.FindControl("Week3"), TextBox).Text.Trim

myDataRow.Item("Week4") = CType(item.FindControl("Week4"), TextBox).Text.Trim

myDataRow.Item("Week5") = CType(item.FindControl("Week5"), TextBox).Text.Trim

ProDTb.Rows.Add(myDataRow) '添加一行

Next

Dim cinvlist() As String = TxInv.Value.Split(",") '定义一个数组,并分割里面的内容

myDataRow = ProDTb.NewRow()

myDataRow.Item("AutoId") = i + 1

myDataRow.Item("产品编号") = cinvlist(0)

myDataRow.Item("产品名称") = cinvlist(1)

myDataRow.Item("零售价") = cinvlist(2)

//为得到供价,打开了另外的一个表(客户供价表)

Dim ctbl As DataTable = Cls_common.ExecQuerySQL("select isnull(dfeevalue,0) as dfeevalue from 客户供价 where denddate is null and ccuscode='" & cCusCode.Text & "' and csupinvcode='" & cinvlist(3) & "'")

If ctbl.Rows.Count > 0 Then

myDataRow("供价") = ctbl.Rows(0)("dfeevalue")

Else

myDataRow("供价") = 0

End If

myDataRow.Item("iNum") = 0

myDataRow.Item("iMoney") = 0

myDataRow.Item("Week1") = 0

myDataRow.Item("Week2") = 0

myDataRow.Item("Week3") = 0

myDataRow.Item("Week4") = 0

myDataRow.Item("Week5") = 0

ProDTb.Rows.Add(myDataRow)

Repeater1.DataSource = ProDTb

Repeater1.DataBind()

viewstate("ProDTb") = ProDTb ' 放到viewstate

End Sub

3, 下面就是子窗口cSmallInv.aspx的设计,在子窗口中放置一个DataGrid控件,绑定好数据,并在ItemDataBound事件中加上提示信息以及传值的代码,如下:

Private Sub GridList_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles GridList.ItemDataBound

If e.Item.ItemType = ListItemType.Item OrElse e.Item.ItemType = ListItemType.AlternatingItem Then

// 双击传值的代码(javascript

e.Item.Attributes.Add ("ondblclick", "javascript: selTopic ('" & e.Item.Cells(0).Text & "','" & e.Item.Cells(1).Text & "','" & e.Item.Cells(2).Text & "','" & e.Item.Cells(3).Text & "')")

e.Item.Attributes.Add("title", "双击选择型号")//添加提示信息

End If

End Sub

脚本如下:(加入到cSmallInv.aspxhtml视图中)

<script language="javascript" type="text/javascript">

function selTopic(id,name,dfeevalue,csupinv)

{

dialogArguments.Form1.TxInv.value=id+','+name+','+dfeevalue+','+csupinv;//这时会触发上面的TxInvServerChanged事件

window.close();

}

</script>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值