我有一个下拉列表和一个gridview。
gridview数据源依赖于dropdown.SelectedValue
下拉列表:
<asp:DropDownList ID="DropDownListLoggedInUser" runat="server" autopostback="True"
DataSourceID="SqlDataSource3" DataTextField="Medarbejder"
DataValueField="Medarbejder"
onload="DropDownListLoggedInUser_Load">
</asp:DropDownList>
这是数据源:
<asp:SqlDataSource ID="SqlDataSource3" runat="server"
ConnectionString="<%$ ConnectionStrings:EGWebtidConnectionString %>"
SelectCommand="SELECT [Medarbejder] FROM [Sager] WHERE ([Medarbejder] IS NOT NULL)">
</asp:SqlDataSource>
gridview:
<asp:GridView ID="GridViewSagsoversigt" runat="server" CellPadding="4" ForeColor="#333333"
GridLines="None" Style="text-align: left" AutoGenerateColumns="False" DataSourceID="SqlDataSource1"
OnPreRender="GridViewSagsoversigt_PreRender" DataKeyNames="Sagsnr" EnablePersistedSelection="True"
SelectedIndex="0" OnSelectedIndexChanged="GridViewSagsoversigt_SelectedIndexChanged">
其数据源:
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:EGWebtidConnectionString %>"
SelectCommand="SELECT Sagsnr, Arbejskort, Adresse, Postnr, [By], Beskrivelse, Bemaerkning, Ansvarlig, Medarbejder FROM Sager WHERE ([Medarbejder] LIKE '%' + @Medarbejder + '%')">
<SelectParameters>
<asp:ControlParameter ControlID="DropDownListLoggedInUser" Name="Medarbejder"
PropertyName="SelectedValue" Type="String" />
</SelectParameters>
</asp:SqlDataSource>
页面加载时在Dropdown完全加载并设置Dropdown.SelectedValue
之前,Gridview会询问SelectedValue
。因此SelectedValue
会返回""
,并且Gridview不会显示任何内容。
当我点击下拉列表并选择一个名称时,它会进行回发,并且一切都按计划进行。
那么我怎样才能确定,首先加载下拉列表然后加载gridview?
答案 0 :(得分:2)
当您控制数据源控件时,无法显式控制它。您可以做的是在加载下拉列表后再次在gridview上调用DataBind()以再次重新绑定到数据库。您还可以通过点击选择事件并设置e.Cancel = true来取消第一个gridview加载(如果您想要消除数据库调用)。
我不知道DataSourceControls的顺序是否会影响执行的优先级......我不知道这是否也是一个因素......
HTH。
答案 1 :(得分:-1)
在Page_Load()方法
if (Page.IsPostBack){
//make the GridView to ask the Dropdown.SelectedValue here
}