保存/检索/比较DB中的CheckboxList值

时间:2014-12-07 19:06:14

标签: c# sql asp.net database checkboxlist

我不确定我想要的是否可能,但到目前为止我没有运气......

我正在使用Visual Studio,asp.net和SQL。 varchar(max)类型表中的字段...

我想要做的是将CheckBoxList的值保存到数据库中并检索它们以在SQL命令中比较它们以从数据库中的表中过滤掉一些值。

当我举一个例子时,它更容易理解:

所以我在代码的HTML方面有这些。

<asp:CheckBoxList ID="CheckBoxList1" runat="server" onselectedindexchanged="CheckBoxList1_SelectedIndexChanged">
        <asp:ListItem Value="1">Sales</asp:ListItem>
        <asp:ListItem Value="2">Administration</asp:ListItem>
        <asp:ListItem Value="3">Help</asp:ListItem>
</asp:CheckBoxList>

这是用于保存数据的代码

protected void CheckBoxList1_SelectedIndexChanged(object sender, EventArgs e)
{
        TextBox20.Text = "";
        string s = null;

        for (int i = 0; i < CheckBoxList1.Items.Count; i++)
        {
            if (CheckBoxList1.Items[i].Selected)
                s += CheckBoxList1.Items[i].Value + ",";

            TextBox20.Text = s;
        }
    }

现在当某人选择两个选项时,例如SalesAdministration,我希望将值1,2存储在数据库中的单个列中。

然后使用SQL显示行检索值,这些行包含我想要的列中的销售或管理/销售和管理。

我不确定我是否会以正确的方式进行此操作..但是任何帮助都会受到赞赏....我读到创建一个包含我需要的所有值的表是正确的方式..但我不知道如何它有效..

1 个答案:

答案 0 :(得分:1)

首先,我建议使用StringBuilder类在循环内进行字符串连接,因为它更有效 -

  

对于执行大量字符串操作的例程(例如在循环中多次修改字符串的应用程序),重复修改字符串会严重影响性能。另一种方法是使用StringBuilder,它是一个可变的字符串类。

MSDN StringBuilder Class Documentation

我同意HABO上面的评论,将逗号分隔值存储在一个列中几乎总是一个坏主意。您应该创建一个名为User的类。提供User类属性,例如“name”和“roles”。

关于这些数据的数据库结构,我再次同意HABO,建议使用两个表。用户和用户角色。在User表中,您将存储Id,Username,Age等数据,然后您可以在UserRoles表存储UserId(User表中的Id)中,这样就可以为User分配多个角色。

如果您想要更多详细信息,请随时提出,我将尝试提供示例模式等。