2014-12-07 6 views
3

Я не уверен, если то, что я хочу, это возможно, но до сих пор я не имел счастья ...Сохранить/Восстановить/Сравнение значений CheckBoxList из БД

Я использую Visual Studio, ASP.NET и SQL. поле в таблице в varchar (max) type ...

Что я хочу сделать, это сохранить значения 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; 
     } 
    } 

Теперь, когда кто-то выбирает, как два варианта, например Sales и Administration, я хочу значения 1,2, которые будут храниться в базе данных в один столбец.

Затем извлекайте значения, используя строки SQL show, которые имеют Sales или Administration/Sales and Administration в столбце, который я хочу.

Я не уверен, правильно ли я это сделаю. Но любая помощь будет оценена ... Я прочитал, что создание таблицы со всеми значениями, которые мне нужны, это правильный путь. Но я знаю, как это работает ..

+0

Если вы разместите код, XML или данных образцов, пожалуйста ** ** выделить те строки в текстовом редакторе и нажмите кнопку «образцы кода» ('{}') на панели инструментов редактора, чтобы получить хороший формат и синтаксис. –

+0

То, что я сделал, не знаю, что пошло не так. Все было так испорчено ... Спасибо, что исправили его. – Rifshan

+1

Совет. Сохранение нескольких значений в одном столбце («1,2»), как правило, плохое. Это значительно усложняет запросы позже, например. найти всех администраторов, которые являются инженерами, а не продаются. Использование отдельной таблицы, например.'UserRoles', и объединение его с данными' User' является общим подходом. – HABO

ответ

1

Во-первых, я бы рекомендовал использовать класс StringBuilder для выполнения конкатенации внутри цикла, поскольку это является гораздо более эффективным -

для процедур, которые выполняют обширные манипуляции со строками (например, как приложения, которые несколько раз изменяют строку в цикле), изменение строки неоднократно может привести к значительному снижению производительности. Альтернативой является использование StringBuilder, который является изменяемым строковым классом.

MSDN StringBuilder Class Documentation

Я согласен с комментарием выше, сделанное Habo, хранение запятыми значений в одном столбце почти всегда плохая идея. Вероятно, вы должны создать класс User. Дайте свойства класса User, такие как «имя» и «роли».

Что касается структуры базы данных для этих данных, еще раз я согласен с HABO, рекомендуется использовать две таблицы. Пользователь и UserRoles. В таблице User вы должны хранить такие данные, как Id, Username, Age и т. Д., Которые вы можете затем использовать в пользовательском каталоге UserRoles StoreId (идентификатор из таблицы User), таким образом пользователю может быть назначено несколько ролей.

Если вы хотите более подробно, не стесняйтесь спросить, и я постараюсь привести примеры схем и т.д.

+0

Я чувствую, что делаю это совершенно неправильно ... Я получаю концепцию сейчас ... Было бы очень полезно, если бы кто-нибудь мог опубликовать пример использования этого с checkboxlist/database в asp.net .. – Rifshan

+0

Не могли бы вы дать немного больше информации о том, как вы взаимодействуете с БД? (например, вы используете Entity Framework?) – MaxRev17

+0

Извините за мою тупость, не уверен, что это такое ... Я использую встроенную систему SQL Database в Visual Studio 2010, я думаю, что это называется SQL Express – Rifshan

Смежные вопросы