我在转发器中有两个下拉列表。根据我在第一个下拉列表中选择的值,第二个需要填充(两者都需要通过存储过程从DB填充)。对此有任何帮助。
我正在添加我到目前为止的代码,但它并不完全正确
<asp:Repeater ID="rpt" runat="server" OnItemDataBound="rpt_ItemDataBound">
<ItemTemplate>
<tr>
<td style="width: 40%; text-align: left">
<asp:DropDownList ID="ddlOne" runat="server" Width="150px" OnSelectedIndexChanged="PopulateSecondDropDown_selectIndexchanged"
AutoPostBack="true">
</asp:DropDownList>
</td>
</td>
<td style="width: 40%; text-align: left">
<asp:DropDownList ID="ddlTwo" runat="server" Width="150px">
</asp:DropDownList>
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
<asp:Button ID="Save" runat="server" Text="Save" OnClick="Save_Values_Click"/>
在页面上加载
rpt.ItemDataBound += new RepeaterItemEventHandler(rpt_ItemDataBound);
rpt.DataSource = ListForFirstDropDown.GetDropDownList; // this returns values only for the first dropdownlist
rpt.DataBind();
protected void rpt_ItemDataBound(object source, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item | e.Item.ItemType == ListItemType.AlternatingItem)
{
// not sure how to handle this here
}
}
public void PopulateSecondDropDown_selectIndexchanged(object sender, EventArgs e)
{
ddlTwo.Items.Clear();
int ID = Convert.ToInt32(ddlOne.Text);
LoadSecondDropDown(ID);
}
private void LoadSecondDropDown(int ID)
{
rpt.DataSource = ListForSecondDropDown.GetDropDownList(ID); // this returns values only for the second dropdownlist
rpt.DataBind();
}
答案 0 :(得分:0)
使用SQLDataSource,您可以使用SelectParameters定义select语句中使用的条件。这允许您使用许多来源作为参数值,包括页面上的另一个控件。
以下是填充下拉列表的SQLDataSource示例,其选定值在另一个数据源和列表中使用:
<asp:SqlDataSource
runat="server"
ID="firstDataSource"
ConnectionString="<%$ connectionStrings:MyConnectionString %>"
SelectCommand="SELECT DISTINCT item1 FROM table" />
<asp:DropDownList
runat="server"
ID="itemList"
DataSourceID="firstDataSource"
DataValueField="item1"
DataTextField="item1"
AutoPostBack="true" />
<asp:SqlDataSource
runat="server"
ID="secondDataSource"
ConnectionString="<%$ connectionStrings:MyConnectionString %>"
SelectCommand="SELECT item2 FROM table WHERE item1 = @item1">
<SelectParameters>
<asp:ControlParameter ControlID="itemList" PropertyName="SelectedValue" Name="item1" />
</SelectParameters>
</asp:SqlDataSource>
<asp:DropDownList
runat="server"
DataSourceID="secondDataSource"
DataValueField="item2"
DataTextField="item2" />
这适用于转发器的ItemTemplate
。如果“firstDataSource”需要来自转发器项的键,则可以使用隐藏的字段控件和另一个ControlParameter
。
<asp:Repeater runat="server" DataSourceID="topDataSource">
<ItemTemplate>
<asp:HiddenField runat="server" ID="key" Value='<%# Eval("id") %>' />
<!-- ... -->
</ItemTemplate>
</asp:Repeater>