好的,我真的希望你们可以帮我解决这个问题,我花了两天的时间试图解决这个问题,我想我要把电脑扔到窗外,所以我想我也可以先问一下:
我正在设计一个带有两个下拉列表的网页,一个用于制作汽车,另一个用于模型,两者都绑定到具有单独SQLDataSource的数据库,并使用不同的语句。我通过设置appendDataBoundItems = true并添加名为all的项目,在两者的顶部添加“All”。然后,当我用一个查询字符串填充Make时,所有模型项都会被添加两次(但只有数据绑定项)。
这是我的代码:
<asp:DropDownList ID="DropDownMake" runat="server"
DataSourceID="SqlMakes" DataTextField="Make" DataValueField="Make"
AppendDataBoundItems="True" EnableViewState="False" AutoPostBack="True">
<asp:ListItem Selected="True" Value="All">All</asp:ListItem>
</asp:DropDownList>
<asp:DropDownList ID="DropDownModel" runat="server"
AppendDataBoundItems="True" AutoPostBack="True" DataSourceID="SqlModels"
DataTextField="Model" DataValueField="Model" EnableViewState="False">
<asp:ListItem>All</asp:ListItem>
</asp:DropDownList>
<asp:SqlDataSource ID="SqlMakes" runat="server"
ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
SelectCommand="SELECT DISTINCT [Make] FROM [Parts]">
</asp:SqlDataSource>
<asp:SqlDataSource ID="SqlModels" runat="server"
ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
SelectCommand="SELECT DISTINCT [Model] FROM [Parts] WHERE ([Make] = @Make)">
<SelectParameters>
<asp:ControlParameter ControlID="DropDownMake" Name="Make"
PropertyName="SelectedValue" />
</SelectParameters>
</asp:SqlDataSource>
'在VB文件中:
Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
DropDownMake.SelectedValue = Request.QueryString("Make")
DropDownModel.SelectedValue = Request.QueryString("Model")
End Sub
如果我删除行“DropDownMake.SelectedValue = Request.QueryString(”Make“)”它不再产生重复。到底是怎么回事??我发誓我花了更多时间开发整个iphone应用程序,如果有人帮我解决这个问题,我想我将不得不为你颁奖。
谢谢!
答案 0 :(得分:6)
我认为您的数据绑定方法可能会被触发两次。您是否尝试设置appendDataBoundItems=false
,然后附加OnDataBound
事件的事件处理程序,并在事件处理程序中插入您的顶级项目?
protected void yourDdlControl_DataBound(object sender, EventArgs e)
{
if (yourDdlControl.Items.Count > 0)
{
yourDdlControl.Items.Insert(0, "All");
yourDdlControl.Items[0].Value = "";
yourDdlControl.SelectedIndex = 0;
}
}
}
好的,这就是c#代码,但你应该能够翻译它:)。此外,您可以根据查询参数的存在,在DataBound
中设置所选值。
答案 1 :(得分:1)
将您的代码放入内部而不是回发,即
If Not Page.IsPostBack Then
DropDownMake.SelectedValue = Request.QueryString("Make")
DropDownModel.SelectedValue = Request.QueryString("Model")
End If