Btn.Command +=new CommandEventHandler(OnBtnClick);private void OnBtnClick(object sender, CommandEventArgs e)
{
}
{
}
解决方案 »
- 【诡异!!!】为什么在WEB页面中的超链接文件打不开?
- 自定义控件中读取xml资源文件的问题
- 像qq网站上的这个窗口如何实现来的?
- 得到网页HTML后如何用XSLT来得到想要的结果,例如得到页面中某一个列表的全部HTML代码
- 那里有搜索的例子呀?
- 关于智能客户端 dll 程序在客户端的权限问题,急,在线等。
- 怎样从一名程序员过度到项目经理
- 菜问题,关于DataGrid
- 执行带字符串的exec语句,当字符串长度超过256时,字符串就会被截断,执行语句出错了,该如何解决呢
- 请教ASP.NET中用C#语言连数据库
- IIS配置问题??
- 怎样实现我的一个maxvalue属性,既能接受int型的数值,也能接受float型的数值
this.bt_post.Click += new System.EventHandler(this.bt_post_Click);
private void bt_post_Click(object sender, System.EventArgs e)
{
//动态产生或装载控件
//也许需要连接控件事件处理函数
//加到父控件的Controls
}里生成或装载了动态控件。当控件在客户端触发,postback到服务器端时,IsPostBack==true,这些控件没有被重新生成,怎么能触发事件?所以答案是,当你需要动态生成或装载控件时,应该在if (!IsPostBack)之外做。我问为什么想在if (!IsPostBack)之内做呢?回答是想只生成一次,跟在ASPX页面里一样<form id="form1" runat=server>
<asp:Button id="Button1" runat="server" Text="Button1" OnClick="Button_Click"/>#%&%#&%^#&,你怎么会认为这个控件只生成一次呢?这些玩意也不是魔术,想生成一个Button对象,你需要用Button btn = new Button();需要触发它的Click事件,你需要用btn.Click += new EventHandler(YourHandler);即使象包含<asp:Button id="Button1" runat="server" Text="Button1" OnClick="Button_Click"/>的页面,它也是被转化成C#或VB文件,编译成assembly,然后再被执行的啊不信?加一个页面,TestControls.aspx:<%@ Page Debug="true" %>
<%@ Import Namespace="System.Data"%>
<%@ Import Namespace="System.Data.SqlClient"%><form id="form1" runat=server>
<asp:Button id="Button1" runat="server" Text="Button1" OnClick="Button_Click"/>
<asp:DataGrid id="DataGrid1" runat="server" AutoGenerateColumns="false" GridLines="Both">
<Columns>
<asp:TemplateColumn HeaderText="Name">
<ItemTemplate><%# DataBinder.Eval(Container.DataItem,"Name")%></ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
</form>
<script language="C#" runat="server">
void Button_Click(Object sender, EventArgs e)
{
Button btn = (Button)sender;
Response.Write(btn.Text + " is clicked<BR>");
}void Page_Load(Object sender, EventArgs e)
{
Button btn = new Button();
btn.ID = "Button2";
btn.Text = "Button2";
btn.Click += new EventHandler(Button_Click);
form1.Controls.Add(btn);
if (!IsPostBack)
{
SqlDataAdapter da = new SqlDataAdapter("select Name=au_fname + ' ' + au_lname from authors", "server=localhost;database=pubs;uid=sa;pwd=;");
DataTable dt = new DataTable();
da.Fill(dt);
DataGrid1.DataSource = dt.DefaultView;
DataGrid1.DataBind();
}
//}//这是故意的</script>把最后一个“}”注释掉,然后在浏览器里向你的服务器调用TestControls.aspx
能给出vb的方法吗?尽量详细点,谢谢!
AddHandler bt_post.Click, New EventHandler(AddressOf bt_post_Click)
private void bt_post_Click(object sender, System.EventArgs e)委托,顾名思义将某个控件的某个事件交给一个处理函数去做
this.bt_post.Click += new System.EventHandler(this.bt_post_Click);
具体怎么做,也就是你要写的事件处理过程
private void bt_post_Click(object sender, System.EventArgs e)
TO:我现在动态生成了N个button,每个button都需要自己的事件函数,怎么解决呢?
可以委托给不同的函数,也可以委托给一个函数,根据sender.commandName来判断是哪个Button 触发的,再相应处理
n_dropdownlist = New DropDownList
n_dropdownlist.ID = "dl" + dr("id")
n_dropdownlist.AutoPostBack = True
Dim item0 As New ListItem
Dim item1 As New ListItem
item0.Text = dr("mc")
item0.Value = dr("id")
item1.Text = "OOOKKK"
item1.Value = "OOOKKK"
item2.Text = "XXXXXXX"
item2.Value = "XXXXXX"
n_dropdownlist.Items.Add(item0)
n_dropdownlist.Items.Add(item1)
n_dropdownlist.Items.Add(item2)
PlaceHolder1.Controls.Add(n_dropdownlist)我想分别指定他们的事件函数,请指教..
Dim btn As Button = CType(sender, Button)
Response.Write((btn.Text + " is clicked<BR>"))
End Sub 'Button_Click
Sub Page_Load(sender As [Object], e As EventArgs)
Dim btn As New Button()
btn.ID = "Button2"
btn.Text = "Button2"
AddHandler btn.Click, AddressOf Button_Click
form1.Controls.Add(btn)
If Not IsPostBack Then
Dim da As New SqlDataAdapter("select Name=au_fname + ' ' + au_lname from authors", "server=localhost;database=pubs;uid=sa;pwd=;")
Dim dt As New DataTable()
da.Fill(dt)
DataGrid1.DataSource = dt.DefaultView
DataGrid1.DataBind()
End If
End Sub 'Page_Load
谢谢你的回复,还有几个地方不明白:
一、btn不用withevent吗?dim btn as new button()这样就可以?
二、假如有两个button怎么解决?
你能把怎么委托写详细点吗?谢谢!
<head>
<script runat="server" language="vb">
Sub r_Click(sender As Object, e As EventArgs)
Label1.Text = (CType(sender,Button)).Text
End Sub
Sub Page_Load(sender As Object, e As EventArgs)
Dim j As Integer
For j = 1 To 6
Dim r As New Button()
r.Text="我是Button " + j.ToString()
r.ID = "ID" + j.ToString()
AddHandler r.Click, New EventHandler(AddressOf r_Click)
m.Controls.Add(r)
Next j
End Sub
</script>
</head>
<body>
<form runat="server" id="m">
<asp:Label id=Label1 runat="server"/>
</form>
</body>
</html>
------------------------------------
System.Web.HttpException: 未能加载视图状态。正在向其中加载视图状态的控件树必须与前一请求期间用于保存视图状态的控件树相匹配。
例如,当以动态方式添加控件时,在回发期间添加的控件必须与在初始请求期间添加的控件的类型和位置相匹配。
at System.Web.UI.Control.LoadViewStateRecursive(Object savedState)
at System.Web.UI.Control.LoadViewStateRecursive(Object savedState)
at System.Web.UI.Control.LoadViewStateRecursive(Object savedState)
at System.Web.UI.Control.AddedControl(Control control, Int32 index)
at System.Web.UI.ControlCollection.Add(Control child)
at System.Web.UI.WebControls.RowControlCollection.Add(Control child)
at System.Web.UI.ControlCollection.AddAt(Int32 index, Control child)
at System.Web.UI.WebControls.RowControlCollection.AddAt(Int32 index, Control child)
at System.Web.UI.WebControls.TableRowCollection.AddAt(Int32 index, TableRow row) a
t System.Web.UI.WebControls.TableRowCollection.Add(TableRow row)
at vs_sbmis.creat.Page_Load(Object sender, EventArgs e) in D:\sbmis\vs-sbmis\creat.aspx.vb:line 149