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.aspx的html视图中)
<script language="javascript" type="text/javascript">
function selTopic(id,name,dfeevalue,csupinv)
{
dialogArguments.Form1.TxInv.value=id+','+name+','+dfeevalue+','+csupinv;//这时会触发上面的TxInv的ServerChanged事件
window.close();
}
</script>