asp.net中的多项选择无效

时间:2015-05-14 14:49:44

标签: c# asp.net

我在asp.net中使用Listbox来选择多个选项,但它不能用于“program”的多个选择。只选择其中的第一个值插入数据库。代码背后是.aspx.cs。 以下是我的多选项选择和插入代码的一部分。我正在使用“程序”的多个选择:

解决方案:更新后面的代码并且有效。

.aspx页面:

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
     ConnectionString="<%$ ConnectionStrings:TestConnectionString %>" 
     DeleteCommand="DELETE FROM [Database_table] WHERE [ID] = @ID"    
     InsertCommand="INSERT INTO [Database_table] ([FirstName], [LastName], [address],[program] VALUES (@FirstName, @LastName, @address, @program)" 
     SelectCommand="SELECT * FROM [Database_table]">
         <DeleteParameters>
             <asp:Parameter Name="ID" Type="Int32" />
         </DeleteParameters>
         <InsertParameters>
             <asp:Parameter Name="FirstName" Type="String" />
             <asp:Parameter Name="LastName" Type="String" />
             <asp:Parameter Name="address" Type="String" />
             <asp:Parameter Name="program" Type="String" />
         </InsertParameters>
</asp:SqlDataSource>

<asp:ListBox id="program" rows="10"  SelectionMode="Multiple" runat="server">
    <asp:ListItem selected="true"></asp:ListItem>
    <asp:ListItem>Option A</asp:ListItem>
    <asp:ListItem>Option B</asp:ListItem>
    <asp:ListItem>Option C</asp:ListItem>
    <asp:ListItem>Option D</asp:ListItem>
    <asp:ListItem>Option E</asp:ListItem>
    <asp:ListItem>Option F</asp:ListItem>
    <asp:ListItem>Option G</asp:ListItem>
    <asp:ListItem>Option H</asp:ListItem>
    <asp:ListItem>Option I</asp:ListItem>
</asp:ListBox>

更新后面的代码.aspx.cs:

if (error_type == "")
{
    SqlDataSource1.InsertParameters["FirstName"].DefaultValue = FirstName.Text;
    SqlDataSource1.InsertParameters["LastName"].DefaultValue = LastName.Text;
    SqlDataSource1.InsertParameters["address"].DefaultValue = address.Text;

    string items = string.Empty;
    string items_updated = string.Empty;

    foreach (ListItem item in program.Items)
    {
        if (item.Selected)
        {
            items += item.Text + ",";
        }
    }

    if (!string.IsNullOrEmpty(items))
    {
        items_updated = items.Remove(items.LastIndexOf(","));   
    }

    SqlDataSource1.InsertParameters["program"].DefaultValue = items_updated;
    SqlDataSource1.InsertParameters["program"].DefaultValue = program.SelectedItem.Text;
    SqlDataSource1.Insert();

    Response.Redirect("http://www.example.org/Success.aspx", false);
}
else
{
    Response.Redirect("http://www.example.org/Failure.aspx", false);
}

对于程序,我也尝试过如下所示,它不能用于选择多个选项:

SqlDataSource1.InsertParameters["program"].DefaultValue = program.Text;

如果我在这里错过了什么,请你建议吗?

2 个答案:

答案 0 :(得分:3)

我不确定你想要在这里实现什么,我认为你没有为你的目标提供足够的信息,但是,乍一看,你的代码似乎错过了一个在所选项目之间进行迭代的循环

如果您尝试在数据库中为每个选项插入一行,则应使用以下内容:

foreach (ListItem item in program.Items)
{
    if(item.Selected)
    {

         SqlDataSource1.InsertParameters["FirstName"].DefaultValue = FirstName.Text;
         SqlDataSource1.InsertParameters["LastName"].DefaultValue = LastName.Text;
         SqlDataSource1.InsertParameters["address"].DefaultValue = address.Text;
         SqlDataSource1.InsertParameters["program"].DefaultValue = item.Text;

         SqlDataSource1.Insert();

    }
}

否则,如果要将所有选项放在单个数据库行中,我建议您更改数据库结构并添加&#34; OptionTable&#34;。如果这不是您的选择,并且您想要一行中的所有选项,则可以使用以下内容:

string items = string.Empty;
foreach (ListItem item in program.Items)
{
    if(item.Selected)
    {
        items &= item.Text;
    }
}
SqlDataSource1.InsertParameters["FirstName"].DefaultValue = FirstName.Text;
SqlDataSource1.InsertParameters["LastName"].DefaultValue = LastName.Text;
SqlDataSource1.InsertParameters["address"].DefaultValue = address.Text;
SqlDataSource1.InsertParameters["program"].DefaultValue = items;
SqlDataSource1.Insert();

答案 1 :(得分:2)

您使用program.SelectedItem.Text获取第一个所选项目的文字。请查看:https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listbox.selectionmode%28v=vs.110%29.aspx

基本上,您需要执行以下操作:

foreach (ListItem item in program.Items)
{
    if(item.Selected)
    {
        // put your query here
    }
}