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();
    }
}