非GridView控件达成,网页铵钮动态加载用户控件以及其事件

开荒供给,三个用户控件Form以及铵钮事件,须要移至网页来管理。
何以说呢?
举个简易的例子,用户控件中有二个文本框,一个单选用和三个铵钮。原来是管理逻辑管理均在用户控件举办。未来是这几个逻辑管理要搬到网页中来拓展。
那网页又是怎么着的图景?
网页也可能有一个铵钮,当操成效户点一点那些铵钮,铵钮事件将动态加载用户控件。
当操功能户输入完文本框,采用了单选项,点击保存开关,刚才输入的新闻需求显示于网页上。
正是那个样子。

“小编建了三个ascx,ascxA,ascxB
ascxA中放了二个PlaceHold,
ascxB中放了一个textBox
ascxA在page_load中动态创造了5个ascxB但是页面上怎么都没出示”

Insus.NET在促成《ASP.NET开采,从二层至三层,至面向对象
http://www.cnblogs.com/insus/p/3880606.html中,没有把数据编辑与更新功能一起演示,留下给网友们自由发挥,但是还是有网友想看看Insus.NET用实现方法。

Insus.NET先规划用户控件:
威尼斯人6799.com 1

那是发源论坛网络朋友的标题,Insus.NET就以此难点做三个演示例子,方法与技术分享给我们。

先前Insus.NET的做法,是在GridView控件中举行。如那篇录制教程《GridView
艾德it Update Cancel
Delete》http://www.cnblogs.com/insus/archive/2011/01/25/1944295.html

去.UcA.ascx.cs写代码,
威尼斯人6799.com 2

 在站点上开创三个用户控件ascx B, 拉多少个TextBox在这么些控件上。
创建另二个用户控件ascx A 在这么些用户控件上,拉一个Textbox
和贰个按钮,是让用户在文本框输入数据,点一点铵钮,那样动态爆发ascx
B用户控件,显示于ascx A用户控件的页面上。
在站点上,成立多少个aspx网页。把用户控件ascx
引用至aspx网页上。再在aspx网页上拉贰个开关。让用户点一点以此铵钮,去获取动态发生的文本框的值,并呈现于aspx网页上。

要么那篇《网址是或不是有广播音乐功效》http://www.cnblogs.com/insus/archive/2013/05/09/3066347.html
均能够看来GridView控件的换代作用。

在站点中,成立一个网页:
威尼斯人6799.com 3

前些天的主题素材,ascx A动态加载ascx B. 依据用户输入的数字来发生。
什么在aspx网页上,去获得这些动态发生文本框的值?

总括过去的经历,以为编辑或更新GridView控件的笔录,用户须要点击数次按键,技艺不辱职分。而且对GridView控件编写的代码也多。由此Insus.NET想一贯点击GridView控件某笔记录,然后显示于增多的域中开始展览翻新。

当网页的铵钮点击加载用户控件之后,用户再一次点击用户控件的铵钮时,网页的景况已经破灭,也正是说生命周期已经终止,为了减轻这么些难题能够先参谋此篇:
http://www.cnblogs.com/insus/archive/2012/10/09/2717420.html

好,带着难题一步一步来实现它们。
开创二个站点,Insus.NET使用的是.NET 4.0 和C#用作程序语言。
成立二个AscxB.ascx用户控件:

OK,发轫来探望:
第一在GridView控件增加一列:
威尼斯人6799.com 4

写三个办法,是动态加载用户控件
威尼斯人6799.com 5

威尼斯人6799.com 6威尼斯人6799.com 7

接下来在抬高开关后,再增加多个铵钮,一个是立异,八个是撤销:
威尼斯人6799.com 8

上海体育场所中有个委托UcA1_Saving()
威尼斯人6799.com 9

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="AscxB.ascx.cs" Inherits="AscxB" %>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>

那四个铵钮,一齐初它的处境是剥夺的,可看它们的Enabled=“false”。也正是说网页加载时,那四个铵钮是不可用。
接下去,大家分别完成OnRowCreated=”GridViewEmployee_RowCreated”,OnClick=”ButtonUpdate_Click”和OnClick=”ButtonCancel_威尼斯人6799.com,Click”事件。先完成率先个,点击GridView控件某一笔记录时,希望能获得那笔记录数据。由此须求创立一个新的存款和储蓄进度,By主键来收获点击当前记下:
威尼斯人6799.com 10

预备甘休,Insus.NET写网页的铵钮的Click事件:
威尼斯人6799.com 11

View Code

有增加了数量库层的存款和储蓄进程,前一篇写好的Employee.cs也须要丰盛相应的逻辑格局大概函数。
威尼斯人6799.com 12

作者们近日的提过,化解操小编点了用户控件的保留铵钮之后,还要存留网页的景观,因而还要在网页的Page_Load事件部分主次:
威尼斯人6799.com 13

 
AscxB.ascx.cs:

近期能够写了:
威尼斯人6799.com 14

终结,看看动画演示:
威尼斯人6799.com 15

威尼斯人6799.com 16威尼斯人6799.com 17

上边有七个事变委托ButtonEdit_Click:
威尼斯人6799.com 18

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class AscxB : System.Web.UI.UserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }       
}

上边程序有几点表明,先是点击编辑之后,获取被点选的的记录主键,然后以主键是获得整笔记录,然后绑定给加多域中去。标识2,须要把增添铵钮与绑定主键的文本框禁用。
标识3是Active更新和撤销铵钮。

View Code

上边是撤除铵钮ButtonCancel_Click事件,实际即是早先化控件状态作用:
威尼斯人6799.com 19

 

文本框清空,该禁止使用的铵钮禁止使用,该启用的铵钮启用。最后是创新铵钮ButtonUpdate_Click事件:
威尼斯人6799.com 20

 在站点上开创用户控件AscxA.asx,在此控件上,拉一个文本框TextBox,三个铵钮Button和三个器皿PlaceHolder。在铵钮增加onclick事件OnClick=”ButtonGenerate_Click”

看样子否,撤销铵钮与创新事件停止未来,所实施的代码是同一的。因而得以把它们写成八个单独的小方法:
威尼斯人6799.com 21

威尼斯人6799.com 22威尼斯人6799.com 23

福寿绵绵完了,看看实时操作演示效果,点击“Edit”铵钮时,它出现了三个那多少个:
Line: 885
Error: Sys.WebForms.PageRequestManagerServerErrorException: Object
reference not set to an instance of an object.
威尼斯人6799.com 24

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="AscxA.ascx.cs" Inherits="AscxA" %>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>&nbsp;&nbsp;<asp:Button ID="ButtonGenerate" runat="server" Text="Generate" OnClick="ButtonGenerate_Click" /><br />
<br />
<asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>

F9设定中断点,F5debug,然后按F11拓展追踪,跑到上边出现格外了:
威尼斯人6799.com 25

View Code

精心检查,原本真的的题目,出现在BizBaseSQLSp.cs类库中,函数public
DataSet ExecuteDataSet(),下边是修改精确方法:
威尼斯人6799.com 26

AscxA.ascx.cs:

封存,再度运营:
威尼斯人6799.com 27

威尼斯人6799.com 28威尼斯人6799.com 29

尚无难度,那样的话,设计网页时,能够把增加域与编制同用,不必浪费在写GridView控件内,还要定义编辑模版。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class AscxA : System.Web.UI.UserControl
{  
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void ButtonGenerate_Click(object sender, EventArgs e)
    {

    }   
}

Insus.NET虽写的不是什么样绝世之作,平凡之中能让你从中获得对ASP.NET技术的具有进步与积淀,足已。

View Code

 

上边是动态加载用户控件的格局,为了能让用户控件ascx a加载到ascx b。
Insus.NET在此,先创立接口(interface):
威尼斯人6799.com 30

 

接口写好,去ascx B实作那几个接口:
威尼斯人6799.com 31

大家回来用户控件ascxA cs代码页,去写开关Click的事件:

 威尼斯人6799.com 32

上海教室中的29行代码,是判别文件框是不是为空,是或不是为数字。
第35代码,是动态加载用户控件ascx
B之后,并转为接口IUserCont若叶龙也ble。然后参与PlaceHolder容器中去。

前几天,大家创立一个网页.aspx,在此网页中,大家引用用户控件ascxa,还在拉一个铵钮,和个Literal控件,铵钮与Literal最开首情状是隐形的,首即便用来获取数据与突显数据。

威尼斯人6799.com 33

.aspx.cs代码:

威尼斯人6799.com 34威尼斯人6799.com 35

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;


public partial class DynamicallyLoadUserControlDemo : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void ButtonGetValue_Click(object sender, EventArgs e)
    {        

    }   
}

View Code

前天,大家做一些别样,便是说,在Ascx A用户控件,当有动态产生Ascx
B控件之后,在网页的Button才会展现。若无发生过铵钮,网页Button正是潜伏起来。
鉴于是还是不是有控件产生是产生在ascx
A用户控件,而隐蔽的指标在网页上。那事关到用户控件与网页之间的联系与和煦。
为了下跌程序的复杂度,Insus.NET得写四个接口,这些接口主体只有叁个只写属性。
威尼斯人6799.com 36

接口写好了,我们在网页.aspx.cs实作这么些接口。说清楚有个别,正是网页的铵钮只接受展现与隐藏,是什么人来决定展现与潜伏,它管不了。
威尼斯人6799.com 37

切切实实是哪个人来支配展现与潜伏呢,刚才所说,是在用户控件ascx A的动态爆发ascx
B之后,那一个网页的Button就呈现。由此,大家去用户控件ascx
a的产生控件代码中加上:
威尼斯人6799.com 38

有一点点难题,如何能把网页转为接口呢?
因为大家地点有把网页实作了IShowable那么些接口。

Ok,
我们回到网页cs,计划写铵钮click事件,来获取数据。可是获取数据起来,是有一点困难,因为动态产生的控件,全部都以在用户控件ascx
A中表现,而且每展现的文本框是缘于ascx B。
在网页中,怎么样得到俄用户控件的ascx A的器皿PlaceHolder呢?
Insus.NET只会利用接口,由此照旧写别的三个接口,是为了让网页.aspx.cs去读取用户控件的Ascx
A的PlaceHolder。
威尼斯人6799.com 39

大家去用户控件ascx A实用这一个接口:
威尼斯人6799.com 40

那样子,大家就能够在网页.aspx.cs的收获值的铵钮获取那一个容器了。别的,由于容器依照用户的急需,也许不仅仅单一回产生一个ascx
B用户控件,大概会有几许个。我们怎么领会哪三个文本框TextBox是哪二个TextBox呢?
抑或写四个接口吧,
威尼斯人6799.com 41

接口写好,大家去ascx B用户控件来实作这么些接口:
威尼斯人6799.com 42

到现行反革命得了,我们一起能够去网页代码中,去写铵钮的Click获取值的事件了:
威尼斯人6799.com 43

上边代码中,#0是获取placeholder容器。
#1是foreach容器中具有文本框。
#2是显得文本框的值。

到此甘休,算是演示完结了。可是,大家照旧来二个最终的作用演示吧:
威尼斯人6799.com 44

Demo source code:
http://download.cnblogs.com/insus/ASPDOTNET/Ascx_load_ascx_page_getvalue.rar

相关文章