是的,我在这里阅读了大部分主题,但我找不到有效的答案。
我有三个下拉列表。第一个是数据绑定以获取不同的实验名称。用户选择,页面回发,第二个下拉菜单显示不同的时间点。这是我需要帮助的地方。我需要在THAT下拉列表中添加一个项目,其ID,DataTextField,DataValueField都是TimePt。
看起来很简单,但我无法让它发挥作用。
protected void Page_Load(object sender, EventArgs e)
{
if (Page.IsPostBack)
{
TimePt.DataSource = TimePTDD;
TimePt.DataValueField = "TimePt";
TimePt.DataTextField = "TimePt";
TimePt.DataBind();
TimePt.Items.Insert(0, new ListItem("--Select---", "0"));
TimePt.SelectedIndex = 0;
}
}
我错过了一些东西。
答案 0 :(得分:5)
在下拉列表中设置AppendDataBoundItems="true"
,它应该有效。
这是一个类似的问题:How to add Item to SqlDataSource databound list
另一个关于使用此方法的潜在重复项及其解决方法:Dropdownlist AppendDataboundItems (first item to be blank)
答案 1 :(得分:3)
protected void Page_Load(object sender, EventArgs e)
{
if (Page.IsPostBack)
{
TimePt.DataValueField = "TimePt";
TimePt.DataTextField = "TimePt";
var times = TimePTDD.ToList();
times.Insert(0, new {TimePt="0",TimePt="--Select--"});
TimePt.DataSource = times;
TimePt.DataBind();
//TimePt.SelectedIndex = 0;
}
}
答案 2 :(得分:0)
<asp:DropDownList ID="ExpAnalysisName" runat="server"
DataSourceID="DropDownEXP" DataTextField="ExpAnalysisName"
DataValueField="ExpAnalysisName" AppendDataBoundItems="true" AutoPostBack=true>
<asp:ListItem Selected="True" Value="0">Select an Experiment</asp:ListItem>
</asp:DropDownList>
<asp:SqlDataSource ID="DropDownEXP" runat="server"
ConnectionString="<%$ ConnectionStrings:SGMD3_DataBase %>" SelectCommand="SELECT DISTINCT ExpAnalysisName FROM VW_Data">
</asp:SqlDataSource>
<asp:DropDownList ID="TimePt" runat="server" AutoPostBack="True" DataSourceID="TimePTDD" DataTextField="TimePt"
DataValueField="TimePt">
</asp:DropDownList>
<asp:SqlDataSource ID="TimePTDD" runat="server"
ConnectionString="<%$ ConnectionStrings:SGMD3_DataBase %>" SelectCommand="SELECT DISTINCT TimePt
FROM VW_Data
WHERE ExpAnalysisName = @ExpAnalysisName">
<SelectParameters>
<asp:FormParameter FormField="ExpAnalysisName" Name="ExpAnalysisName" />
</SelectParameters>
</asp:SqlDataSource>
So you can have a reference.
答案 3 :(得分:0)
我发现您以两种不同的方式指定DataSource
- 标记中的DataSourceID
以及在代码隐藏中手动设置DataSource
。尝试从标记中删除DataSourceID
,看看是否有帮助。
由于我过度使用ASP.NET已经有一段时间了,但我感觉你的DropDownList
在Page_Load
之后重新绑定会取代之前的绑定。
答案 4 :(得分:0)
我敢打赌,这是一个页面生命周期问题。根据MSDN,each data bound control whose DataSourceID property is set calls its DataBind method。
我认为这两个值已经下降到下拉列表。首先,当您手动绑定并附加Page_Load中的额外项目,然后数据源被绑定在Page_PreRender事件中。尝试将Page_Load代码放入Page_PreRender。希望订单有所帮助。
答案 5 :(得分:0)
我建议使用OnDataBound
DropDownList
控制事件,然后将代码放在那里。
您可以将DataSourceID
与代码组合在一起。