C# 将初始值设置为与数据库绑定的下拉列表
我创建了一个下拉列表,如下所示:C# 将初始值设置为与数据库绑定的下拉列表,c#,asp.net,stored-procedures,C#,Asp.net,Stored Procedures,我创建了一个下拉列表,如下所示: <asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="SqlDataSource1" DataTextField="psName" DataValueField="psName"> </asp:DropDownList> <asp:SqlDataSource ID="SqlDataSource1" runat="server" Conn
<asp:DropDownList ID="DropDownList1" runat="server"
DataSourceID="SqlDataSource1" DataTextField="psName" DataValueField="psName">
</asp:DropDownList>
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:igroup9_test1ConnectionString %>"
SelectCommand="spGetProjectStatusList" SelectCommandType="StoredProcedure">
</asp:SqlDataSource>
我想使用另一个查询设置DropDownList的initival值,如下所示:
create proc spGetProjectStatus
(
@ProjectID int
)
as
begin
select ProjStatus.psName
from ProjStatus
where ProjStatus.psID=@ProjectID
end
如何执行此操作?您可以处理DropDownList的数据绑定事件
<asp:DropDownList ID="DropDownList1" runat="server"
DataSourceID="SqlDataSource1"
DataTextField="psName" DataValueField="psName"
OnDataBound="DropDownDataBound"
>
</asp:DropDownList>
您必须在下拉列表中精确地计算项目的索引
但是,更好的方法是在db层中完成这一切。但你可以遵循这个模式
假设您的存储过程可以按如下方式编写:
create proc GetCustomersAndDefault
@defaultid varchar(5) output
as
begin
Select CustomerID, Companyname from Customers; -- for your dropdown list
select @defaultid = customerid from Customers where CustomerID = "BONAP";
end
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>"
SelectCommand="GetCustomersAndDefault" SelectCommandType="StoredProcedure"
OnSelected="SqlDataSource1_Selected">
<SelectParameters>
<asp:Parameter Name="defaultid" Type="String" Direction="Output" Size="5" />
</SelectParameters>
</asp:SqlDataSource>
这需要绑定到sqldatasource控件,如下所示:
create proc GetCustomersAndDefault
@defaultid varchar(5) output
as
begin
Select CustomerID, Companyname from Customers; -- for your dropdown list
select @defaultid = customerid from Customers where CustomerID = "BONAP";
end
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>"
SelectCommand="GetCustomersAndDefault" SelectCommandType="StoredProcedure"
OnSelected="SqlDataSource1_Selected">
<SelectParameters>
<asp:Parameter Name="defaultid" Type="String" Direction="Output" Size="5" />
</SelectParameters>
</asp:SqlDataSource>
进一步改进:可以有另一个版本,您甚至不需要调用FindByValue
方法。这意味着您必须具备在SQL本身中获取所需项的索引的逻辑
希望这有帮助。@shmulikhazan您在那里写了什么代码?我也更新了一点答案。我完全按照你写的内容来尝试://DropDownList1.SelectedItemIndex=5;好了,现在是工作了。这是我忘记的一件小事。非常感谢。改进了答案。请查收
public partial class WebForm1 : System.Web.UI.Page
{
string defaultvalue;
protected void DropDownList1_DataBound(object sender, EventArgs e)
{
//DropDownList1.Items.Insert(0, new ListItem("--Select--", ""));
//DropDownList1.SelectedIndex = 5;
var itm = DropDownList1.Items.FindByValue(defaultvalue);
DropDownList1.SelectedIndex = DropDownList1.Items.IndexOf(itm);
}
protected void SqlDataSource1_Selected(object sender, SqlDataSourceStatusEventArgs e)
{
defaultvalue = e.Command.Parameters[0].Value.ToString();
}
}