我是新手开发者。我正在创建一个页面+一个用户控件。 aspx页面包含一个下拉列表,该列表由aspx页面上的sql数据源填充。 ascx页面包含一个gridview,它由ascx页面上的另一个sql数据源填充。
aspx上的下拉列表包含国家/地区列表,gridview(在ascx上)应根据所选国家/地区显示数据。
我的ascx页面如下。
Partial Class UCtest
Inherits System.Web.UI.UserControl
Private priCountry As String
Public Property PublicCountry() As String
Get
Return priCountry
End Get
Set(ByVal value As String)
priCountry = value
End Set
End Property
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
SqlDataSource1.SelectParameters.Add("Country", priCountry)
End Sub
End Class
<%@ Control Language="VB" AutoEventWireup="false" CodeFile="UCtest.ascx.vb" Inherits="UCtest" %>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
DataSourceID="SqlDataSource1"
EmptyDataText="There are no data records to display.">
<Columns>
<asp:BoundField DataField="CompanyName" HeaderText="CompanyName"
SortExpression="CompanyName" />
<asp:BoundField DataField="Country" HeaderText="Country"
SortExpression="Country" />
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>"
SelectCommand="SELECT [CompanyName], [Country] FROM [Customers] WHERE ([Country] = ?)">
<SelectParameters>
</SelectParameters>
</asp:SqlDataSource>
我的aspx页面
<%@ Register src="UCtest.ascx" tagname="UCtest" tagprefix="uc1" %>
<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True"
DataSourceID="SqlDataSource1" DataTextField="Country" DataValueField="Country">
</asp:DropDownList>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>"
SelectCommand="SELECT DISTINCT [Country] FROM [Customers]"></asp:SqlDataSource>
<uc1:UCtest ID="UCtest1" runat="server" />
Protected Sub DropDownList1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DropDownList1.SelectedIndexChanged
UCtest1.PublicCountry = DropDownList1.SelectedValue
End Sub
如果我只传递静态值,例如
,它可以正常工作 <uc1:UCtest ID="UCtest1" runat="server" PublicCountry="Mexico"/>
所以我认为我正确地链接了用户控件。但是当我运行页面时,我只得到空白页面,这意味着ascx无法从aspx获取数据。我错过了什么?
答案 0 :(得分:1)
可能是在设置值(在SelectedIndexChanged中)后需要强制用户控件刷新自身,在用户控件准备好数据后,可能会触发SelectedIndexChanged事件。
您可以实现此购买,在您的用户控件上创建一个公共方法,并在您从下拉列表中设置值后调用它。
答案 1 :(得分:1)
在ascx控件中定义一个名为CountryId的属性,当您从下拉列表中选择CountryDropdown_SelectedIndexChanged()时,将事件设置为您喜欢的控件属性
Private Sub New(Sender As [Object], e As EventArgs)
YourControl.CountryId = Integer.Parse(CountryDropDown.SelectedVale)
End Sub
然后在你的控件的Property的set访问器中通过将id传递给你的绑定方法来绑定你的gridview
之类的东西 Private _CountryId As Integer = 0
Public Property CountryId() As Integer
Get
Return _CountryId
End Get
Set
_CountryId = value
bindGridView(_CountryId)
End Set
End Property
希望这有帮助,如果没有,并有疑问或查询随时在评论中发布您的查询。快乐的编码。