我在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;
如果我在这里错过了什么,请你建议吗?
答案 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
}
}