`
webcode
  • 浏览: 6111477 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

双击子窗口中的行,自增到父窗口中新增一个行(c#)

 
阅读更多
1, 在父窗口中增加两个Html控件,一个Repeater控件

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

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

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

<scriptlanguage="javascript">

varvDialog=null;

functionSelInv()

...{

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

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

}


</script>

页面如下:

当点击"增行"时,将弹出新的窗口 效果如下:


其html内容如下:

<%...@Pagelanguage="c#"Codebehind="index.aspx.cs"AutoEventWireup="false"Inherits="test.index"%>
<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.0Transitional//EN">
<HTML>
<HEAD>
<title>index</title>
<metaname="GENERATOR"Content="MicrosoftVisualStudio.NET7.1">
<metaname="CODE_LANGUAGE"Content="C#">
<metaname="vs_defaultClientScript"content="JavaScript">
<metaname="vs_targetSchema"content="http://schemas.microsoft.com/intellisense/ie5">
<script>...
varvDialog=null;
functionSelInv()
...{
vDialog
=showModalDialog("cSmallInv.aspx?invname=",window,"status:no;resizable:yes;dialogHeight:500px;dialogWidth:500px;unadorne:yes");

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

</script>
</HEAD>
<bodyMS_POSITIONING="GridLayout">
<formid="Form1"method="post"runat="server">
<FONTface="宋体">
<TABLEid="Table1"style="WIDTH:816px;HEIGHT:214px"cellSpacing="0"cellPadding="0"
width
="816"border="0">
<TBODY>
<TR>
<TD><INPUTtype="submit"value="增行"onclick="SelInv()"><inputtype="hidden"id="TxInv"name="TxInv"runat="server">
</TD>
</TR>
<TR>
<TDvAlign="top">
<asp:Repeaterid="Repeater1"runat="server">
<HeaderTemplate>
<tablewidth="800"border="0"cellpadding="0"cellspacing="1"style="font-size:9pt"bgcolor="#333333">
<trheight="30">
<tdalign="center"valign="middle"bgcolor="#FFFF00">编号</td>
<tdalign="center"valign="middle"bgcolor="#FFFF00">定单号</td>
<tdalign="center"valign="middle"bgcolor="#FFFF00">定单日期</td>
<tdalign="center"valign="middle"bgcolor="#FFFF00">定单数量</td>
<tdalign="center"valign="middle"bgcolor="#FFFF00">派送队</td>
<tdalign="center"valign="middle"bgcolor="#FFFF00">派送标题</td>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<tdheight="20"bgcolor="#ffffff"><asp:TextBoxID="stor_id"Runat="server"></asp:TextBox></td>
<tdheight="20"bgcolor="#ffffff"><asp:TextBoxID="ord_num"Runat="server"></asp:TextBox></td>
<tdheight="20"bgcolor="#ffffff"><asp:LiteralID="ord_date"Runat="server"></asp:Literal></td>
<tdheight="20"bgcolor="#ffffff"><asp:TextBoxID="qty"Runat="server"></asp:TextBox></td>
<tdheight="20"bgcolor="#ffffff"><asp:LiteralID="payterms"Runat="server"></asp:Literal></td>
<tdheight="20"bgcolor="#ffffff"><asp:TextBoxID="title_id"Runat="server"></asp:TextBox></td>
</tr>
</ItemTemplate>
<FooterTemplate>
</TABLE>
</FooterTemplate></asp:Repeater></TD></TR>
<TR>
<TD></TD>
</TR>
</TBODY></TABLE></FONT>
</form>
</body>
</HTML>


Cs代码如下:
usingSystem;
usingSystem.Collections;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Web;
usingSystem.Web.SessionState;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
usingSystem.Web.UI.HtmlControls;
usingSystem.Configuration;
usingSystem.Data.SqlClient;
usingcls_common;//引用自定义的命名空间;
namespacetest
...{
/**////<summary>
///index的摘要说明。
///</summary>

publicclassindex:System.Web.UI.Page
...{
protectedSystem.Web.UI.HtmlControls.HtmlInputHiddenTxInv;
protectedSystem.Web.UI.WebControls.RepeaterRepeater1;

privatevoidPage_Load(objectsender,System.EventArgse)
...{
if(!Page.IsPostBack)
...{
this.Repeater1.DataSource=createTable();
this.Repeater1.DataBind();
}

}


privateDataTablecreateTable()
...{
DataTablectbl
=newDataTable();
ctbl.Columns.Add(
"stor_id",typeof(string));
ctbl.Columns.Add(
"ord_num",typeof(string));
ctbl.Columns.Add(
"ord_date",typeof(string));
ctbl.Columns.Add(
"qty",typeof(string));
ctbl.Columns.Add(
"payterms",typeof(string));
ctbl.Columns.Add(
"title_id",typeof(string));
ViewState[
"table"]=ctbl;//把表结构存放到viewstate中
returnctbl;
}

Web窗体设计器生成的代码#regionWeb窗体设计器生成的代码
overrideprotectedvoidOnInit(EventArgse)
...{
//
//CODEGEN:该调用是ASP.NETWeb窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}


/**////<summary>
///设计器支持所需的方法-不要使用代码编辑器修改
///此方法的内容。
///</summary>

privatevoidInitializeComponent()
...{
this.Repeater1.ItemDataBound+=newSystem.Web.UI.WebControls.RepeaterItemEventHandler(this.Repeater1_ItemDataBound);
this.TxInv.ServerChange+=newSystem.EventHandler(this.TxInv_ServerChange);
this.Load+=newSystem.EventHandler(this.Page_Load);//事件处理及事件委托

}

#endregion


privatevoidTxInv_ServerChange(objectsender,System.EventArgse)   //触发的serverchange事件
...{
DataTabledt
=(DataTable)ViewState["table"];
dt.Rows.Clear();
//清空所有行
inti=0;
foreach(RepeaterItemiteminthis.Repeater1.Items)
...{
i
++;
DataRowtherow
=dt.NewRow();//新增一行
TextBoxstor_id=(TextBox)item.FindControl("stor_id");
therow[
"stor_id"]=stor_id.Text;//使用循环读出子控件中的内容,在第一次加载时会自动跳出此循环,在已有添加的行时,增加到new的表中

TextBoxord_num
=(TextBox)item.FindControl("ord_num");
therow[
"ord_num"]=ord_num.Text;

Literalord_date
=(Literal)item.FindControl("ord_date");
therow[
"ord_date"]=ord_date.Text;

TextBoxqty
=(TextBox)item.FindControl("qty");
therow[
"qty"]=qty.Text;

Literalpayterms
=(Literal)item.FindControl("payterms");
therow[
"payterms"]=payterms.Text;

TextBoxtitle_id
=(TextBox)item.FindControl("title_id");
therow[
"title_id"]=title_id.Text;

dt.Rows.Add(therow);

}

//stringx=TxInv.Value.ToString();
string[]cinvlist=TxInv.Value.Split(',');//接收隐藏的html控件中内容
DataRowrow=dt.NewRow();
row[
"stor_id"]=cinvlist[0].ToString();
row[
"ord_num"]=cinvlist[1].ToString();
row[
"title_id"]=cinvlist[2].ToString();
row[
"qty"]=cinvlist[3].ToString();
row[
"ord_date"]=DateTime.Now;
row[
"payterms"]="job17";
dt.Rows.Add(row);
this.Repeater1.DataSource=dt;
this.Repeater1.DataBind();
ViewState[
"table"]=dt;
}


privatevoidRepeater1_ItemDataBound(objectsender,System.Web.UI.WebControls.RepeaterItemEventArgse)
//绑定文本框中的数据全在该ItemDataBound事件中
...{
if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem)
...{
DataRowViewview
=e.Item.DataItemasDataRowView;
TextBoxstor_id
=(TextBox)e.Item.FindControl("stor_id");
stor_id.Text
=view["stor_id"].ToString();
TextBoxord_num
=(TextBox)e.Item.FindControl("ord_num");
ord_num.Text
=view["ord_num"].ToString();
Literalord_date
=(Literal)e.Item.FindControl("ord_date");
ord_date.Text
=view["ord_date"].ToString();
TextBoxqty
=(TextBox)e.Item.FindControl("qty");
qty.Text
=view["qty"].ToString();
Literalpayterms
=(Literal)e.Item.FindControl("payterms");
payterms.Text
=view["payterms"].ToString();
TextBoxtitle_id
=(TextBox)e.Item.FindControl("title_id");
title_id.Text
=view["title_id"].ToString();

}


}

}

}



运行的效果如下:

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


privatevoidDataGrid1_ItemDataBound(objectsender,System.Web.UI.WebControls.DataGridItemEventArgse)
...{
if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem)
...{
e.Item.Attributes.Add(
"title","双击选择");
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+"')");
}


}


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

<scriptlanguage="javascript"type="text/javascript">

functionselTopic(id,name,dfeevalue,csupinv)

...{

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

window.close();

}


</script>

分享到:
评论

相关推荐

    C#子窗口与父窗口的交互-使用委托与事件

    2. **设置委托:** 在父窗口中,创建一个事件处理方法,然后在打开子窗口时设置子窗口的事件处理程序。这样,当子窗口触发`DataChanged`事件时,父窗口就会接收到通知: ```csharp public class ParentWindow : ...

    MFC子窗口与父窗口之间消息的传递

    例如,当子窗口发送一个消息到父窗口时,父窗口的消息映射表会告诉MFC如何调用合适的函数来处理这个消息。 2. **CButton、CEdit等控件的使用** 在子窗口中,可能会包含各种控件,如按钮(CButton)和编辑框(CEdit)。...

    C#实现给DataGrid单元行添加双击事件的方法

    在这个例子中,当用户双击行时,会弹出一个确认对话框询问用户是否确定要删除数据。 ```csharp e.Item.Attributes.Add("ondblclick", "javascript:return confirm('确定删除" + e.Item.Cells[1].Text + "?');"); ...

    C#中子窗口与父窗口通信

    这里我们讨论的场景是子窗口(Form2)与父窗口(Form1)之间的通信,其中子窗口向父窗口传递信息并更新父窗口的显示内容。下面将详细解释如何实现这一功能。 首先,我们需要创建两个窗体类:Form1和Form2。Form1...

    C# 鼠标钩子 监测鼠标双击事件

    综上所述,"C# 鼠标钩子 监测鼠标双击事件"是一个关于如何在C#中利用Windows API实现全局鼠标事件监听的实例,特别是对双击事件的捕捉和处理。开发者可以通过此项目学习到如何设置和管理鼠标钩子,以及如何在C#中...

    探寻C# Button双击事件

    下面是一个具体的例子,展示如何通过继承`Button`类并重载`Click`事件来实现双击事件: ```csharp using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; // 定义一个...

    C# winform 单击与双击事件同时存在例子

    在C# WinForm开发中,用户界面交互是一个关键部分,其中单击(Click)和双击(DoubleClick)事件是常见的用户输入响应。然而,标题提到的一个常见问题是:在同一个控件上,C# WinForm不支持同时处理单击和双击事件。...

    c#测试双击打开自定义程序

    在本主题“c#测试双击打开自定义程序”中,我们将探讨如何在C#中实现一个功能,即当用户双击特定类型的文件时,能够自动启动我们自定义的程序来处理这个文件。这一功能通常涉及到文件关联,这是操作系统提供的一种...

    C# 解决双击TreeView表里checkbox本身Bug问题

    一个WinForm的TreeView,某node的CheckBox初始状态为false,当双击这个node的checkbox时,会出现很奇怪的情况: 第一次双击checkbox,checkbox显示的状态会切换两次状态,unchecked-&gt; checked-&gt; unchecked,而...

    C#listview双击修改源码4个版本

    当用户双击ListView中的某一行或某一列时,源码会触发一个编辑操作。这个版本主要是为了让开发者了解如何设置双击事件和如何访问选中的项。基础版的核心在于`ListView.ItemDoubleClick`事件的处理,以及如何正确获取...

    三种方法触发GridControl双击行事件

    gridview中的DoubleClick事件可能无法正常响应,这里列举了三种方法触发双击列表行事件

    C# Winform 区别单双击操作

    在Winform中,大多数控件都有一个`Click`事件,当用户单击控件时,该事件会被触发。开发者可以通过在事件处理程序中编写代码来响应这个事件。 - 例如,在`Button`控件上,你可以这样处理`Click`事件: ```csharp ...

    实现了listview中对某一行双击 弹出对话框进行编辑

    在许多应用程序中,我们可能需要实现这样一个功能:当用户双击ListView中的某一行时,弹出一个对话框以便编辑该行的数据。这个功能在GUI(图形用户界面)设计中非常常见,尤其在数据管理类应用中。本文将详细介绍...

    C# winform ListView 中实现可编辑文本或双击出现下拉列表框

    为了添加编辑功能,我们需要在ListView的ItemSelectionChanged事件中动态插入一个TextBox控件,将其位置和大小设置为选中项的边界。当用户完成编辑并按下回车键时,我们需要捕获这个事件,更新ListView项的文字,并...

    两行代码实现Devexpress中XtraTabControl双击关闭page页

    在很多应用程序中,我们可能希望实现一个功能,即用户可以通过双击标签页来关闭当前显示的页面,这可以提高用户体验。本文将详细讲解如何通过两行代码实现这一功能。 首先,我们需要了解XtraTabControl的基本结构。...

    GridView 行单击与双击事件

    GridView 行单击与双击事件,功能:单击选中行 双击打开详细页面 说明:

    ASP.net GridView双击事件,弹出一个窗口显示详细信息

    本主题将深入探讨如何利用ASP.NET GridView的双击事件来实现用户双击某行时,弹出一个窗口显示该行的详细信息。 首先,我们需要在ASP.NET页面上添加一个GridView控件,并将其与数据源(如SqlDataSource或...

    c# WPF中通过双击编辑DataGrid中Cell的示例(附源码).docx

    在C# WPF开发中,有时我们需要实现DataGrid控件的单元格(Cell)双击编辑功能,以便用户可以直接在表格内编辑数据并保存。原生的WPF DataGrid并未直接提供这一特性,但可以通过扩展或第三方库实现。在这个示例中,...

Global site tag (gtag.js) - Google Analytics