SQL数据源selectedvalue参数错误

时间:2011-01-27 13:35:10

标签: c# asp.net sqldatasource

我有一个下拉列表和一个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?

2 个答案:

答案 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
}