我在网格视图中创建了一行(标题行),在其他输入控件中有一个下拉列表。我还在该行上放置了一个按钮(fltbttn-见下文)。我为按钮创建了一个名为fltbttn_Click的加载项处理程序。我希望使用findcontrol访问我的下拉列表(ddlscantype),但是如何才能到达存在筛选器控件的标题行?
Dim fltbttn As New ImageButton
fltbttn.ImageUrl = "\images\bttnFilter.gif"
AddHandler fltbttn.Click, AddressOf fltbttn_Click
Dim cell As New TableCell
Dim row As New GridViewRow(-1, -1, DataControlRowType.Header, DataControlRowState.Normal)
Dim ddlscantype As New DropDownList
AddHandler ddlscantype.SelectedIndexChanged, AddressOf ddlscantype_Changed
ddlscantype.DataSource = SqlDataSource2
ddlscantype.DataValueField = "value"
ddlscantype.DataTextField = "name"
ddlscantype.DataBind()
row.Cells.Add(cell)
cell.Controls.Add(ddlscantype)标记
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate >
<asp:GridView ID="GridView1" runat="server" AllowPaging="True"
AutoGenerateColumns="False" BackColor="White" BorderColor="#E7E7FF"
BorderStyle="None" BorderWidth="1px" CellPadding="3"
DataSourceID="SqlDataSource1" Font-Names="Estrangelo Edessa" Font-Size="Small"
ShowFooter="True"
Caption = '<table border="" width="100%" cellpadding="3" cellspacing="0" bgcolor="#4A3C8C"><tr><td style = "font-size:X-large;font-family:Arial CE;color:White"><b>Receiving Error Log</u></td></tr></table>' >
<RowStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" />
<Columns>
<asp:BoundField DataField="scan" HeaderText="Scan" SortExpression="scan" />
<asp:BoundField DataField="ScanType" HeaderText="ScanType" ReadOnly="True"
SortExpression="ScanType" />
<asp:BoundField DataField="Vendor" HeaderText="ht" ReadOnly="True"
SortExpression="ht" />
<asp:BoundField DataField="Name" HeaderText="ht2" ReadOnly="True"
SortExpression="ht2" />
</Columns>
//footer style and pager style blah blah blah goes here.
</ContentTemplate>
</asp:UpdatePanel>
<ajaxToolkit:UpdatePanelAnimationExtender ID="upae" BehaviorID ="animation" runat="server" TargetControlID = "UpdatePanel1" >
<Animations >
<OnUpdating>
<Parallel duration="0">
<ScriptAction Script="onUpdating();" />
</Parallel>
</OnUpdating>
<OnUpdated>
<Parallel duration="0">
<ScriptAction Script="onUpdated();" />
</Parallel>
</OnUpdated>
</Animations>发布于 2009-08-10 13:56:56
首先我要说的是,您已经动态地创建了您的DropDownList...but,您已经在一个函数中创建了它。
您必须记住,变量/对象有作用域。DropDownList的作用域在声明它的函数中。这意味着它将被添加到页面中并呈现出来,但是一旦完成,它就被销毁了。当用户导致回发到服务器时,DropDownList不再是exists...and,因此事件不会触发。
您必须给DropDownList一个整个页面的范围。在页面级别声明它。
在使用动态控件时,必须记住的另一件事是ASP页面生命周期。
页面被上传到服务器..。
服务器在Page Init事件中创建执行服务器计算所需的所有对象.
就在页面Init事件之后,为page...the加载了page...the ViewState,以确定哪些事件导致回发发生。
如果您的DropDownList在为控件加载ViewState时不存在,那么事件将丢失,您的代码将无法处理它。
我建议您尽量避免使用动态控件。有时您必须使用them...but,它们不容易使用。
我写了一篇关于使用动态ASP.NET控件的文章,这可能有助于您更好地理解。
-Frinny
发布于 2009-08-10 16:14:21
为什么您不使用TemplateField类型作为您的一个数据,然后使用模板标题?
例如:
<asp:TemplateField>
<ItemTemplate>
<%# Eval("Vendor") %>
</ItemTemplate>
<HeaderTemplate>
<asp:DropDownList ID="ddlscantype" runat="server" DataSourceID="SqlDataSource2" DataTextField="name" DataValueField="id" OnSelectedIndexChanged="YourCallbackMethod" />
</HeaderTemplate>
</asp:TemplateField>这将允许您在标题行中安装下拉列表,并且不需要任何动态控件创建。
别忘了把你的活动安排在这里..。
https://stackoverflow.com/questions/1254996
复制相似问题