SuperJWP Ответов: 0

Как добавить несколько элементов checkboxlist в столбец SQL


Привет всем, мне нужно добавить несколько выбранных элементов checkboxlist в одну строку под столбцом applications, например Business Central, Opera PMS, Micros. Я изо всех сил пытаюсь быть кабелем, чтобы понять сценарий, который нужно написать.

Ниже приведен мой код aspx:
<td class="auto-style15">

                        <asp:CheckBoxList ID="AppList" runat="server" Height="60px" RepeatColumns="3" RepeatDirection="Horizontal" Width="486px">
                           <asp:ListItem>Business Central</asp:ListItem>
                           <asp:ListItem>WineMS</asp:ListItem>
                           <asp:ListItem>CPAR</asp:ListItem>
                           <asp:ListItem>OperaPMS</asp:ListItem>
                           <asp:ListItem>My Micos</asp:ListItem>
                           <asp:ListItem>Micros EMC</asp:ListItem>
                           <asp:ListItem>Jet Professional</asp:ListItem>
                           </asp:CheckBoxList>

                   </td>


Вот мой код C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Data;
using System.Configuration;




namespace EmployeeRequest 
{
    public partial class EmployeeRequestForm : System.Web.UI.Page
    {

        string ConnectionString = @"Data Source=sh-jasonkNew\ICTDev;Initial Catalog=NewUserReqForm;Integrated Security=True;";
     

        protected void Page_Load(object sender, EventArgs e)
        {
           
        }
      
        protected void btnSubmit_Click(object sender, EventArgs e)
        {

            if (txtName.Text == "" || txtSurname.Text == "" || txtDepartment.Text == "")
                lblErrorMessage.Text = "Please fill Mandatory Fields";
            using (SqlConnection sqlCon = new SqlConnection(ConnectionString))
            {

                sqlCon.Open();
                
                SqlCommand SqlCmd = new SqlCommand("EmployeeAdd", sqlCon);
                SqlCmd.CommandType = CommandType.StoredProcedure;
                SqlCmd.Parameters.AddWithValue("@Name", txtName.Text.Trim());
                SqlCmd.Parameters.AddWithValue("@Surname", txtSurname.Text.Trim());
                SqlCmd.Parameters.AddWithValue("@Department", txtDepartment.Text.Trim());
                SqlCmd.Parameters.AddWithValue("@EmploymentType", ddlEmploymentType.Text.Trim());
                SqlCmd.Parameters.AddWithValue("@CommenceDate", DateTime.Now);
                SqlCmd.Parameters.AddWithValue("@JobTitle", txtJobTitle.Text.Trim());
                SqlCmd.Parameters.AddWithValue("@TelephoneExt", txtTelephoneExt.Text.Trim());
                SqlCmd.Parameters.AddWithValue("@Gender", ddlGender.Text.Trim());
                SqlCmd.Parameters.AddWithValue("@Workstations", ddlWorkstations.Text.Trim());
                SqlCmd.Parameters.AddWithValue("@Applications", AppList.Text.Trim());
                SqlCmd.Parameters.AddWithValue("@FolderAccessRights", txtFolderAccessRights.Text.Trim());
                SqlCmd.Parameters.AddWithValue("@EmailGroupAccess", txtEmailGroupRights.Text.Trim());
                SqlCmd.Parameters.AddWithValue("@Authorisedby", txtAuth.Text.Trim());
                SqlCmd.ExecuteNonQuery();
                Clear();
                lblSuccessMessage.Text = "Information Submitted Successfully";



            }
        }

        void Clear()
        {
            txtName.Text = txtSurname.Text = txtDepartment.Text = Cal1.Text = ddlEmploymentType.Text = txtJobTitle.Text = txtTelephoneExt.Text = ddlGender.Text = txtFolderAccessRights.Text = txtEmailGroupRights.Text = txtAuth.Text ="";
            hfEmployeeID.Value = "";
            lblSuccessMessage.Text = lblErrorMessage.Text = "";

        }

        protected void Calendar1_SelectionChanged(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {

            }
        }
        protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
        
        {
            string chkboxselect = "";
            for (int i=0;i<AppList.Items.Count;i++)
            {
                if(AppList.Items[i].Selected)
                {
                    if(chkboxselect == "")
                    {
                        chkboxselect = AppList.Items[i].Text;
                    }
                    else
                    {
                        chkboxselect += "," + AppList.Items[i].Text;
                    }
                }
            }
            string mainconn = ConfigurationManager.ConnectionStrings["NewUserReqFormConnectionString1"].ConnectionString;
            SqlCommand sqlconn = new SqlCommand(mainconn);
            string sqlquery = "insert into [dbo].[tbl_EmployeeAdd] ([Applications]) values ('"+ chkboxselect + "')";
           
            
        }
            

        protected void Calendar1_DayRender(object sender, DayRenderEventArgs e)
        {
       
           
        }


        
    }
}


Что я уже пробовал:

Я попробовал следующий скрипт, но он по-прежнему не добавляет имена приложений в столбец. что он делает, он только добавляет аббревиатуру первого выбранного флажка, например Bus или Opr, Mic и т. д.

string chkboxselect = "";
           for (int i=0;i<AppList.Items.Count;i++)
           {
               if(AppList.Items[i].Selected)
               {
                   if(chkboxselect == "")
                   {
                       chkboxselect = AppList.Items[i].Text;
                   }
                   else
                   {
                       chkboxselect += "," + AppList.Items[i].Text;
                   }
               }
           }
           string mainconn = ConfigurationManager.ConnectionStrings["NewUserReqFormConnectionString1"].ConnectionString;
           SqlCommand sqlconn = new SqlCommand(mainconn);
           string sqlquery = "insert into [dbo].[tbl_EmployeeAdd] ([Applications]) values ('"+ chkboxselect + "')";


       }

Richard MacCutchan

Код добавляет именно то, что вы говорите ему в приведенном выше списке. Вам нужно проверить, что возвращается AppList.Items[i].Text Или, может быть, просто не хватает места на дисплее, чтобы показать полные слова.

CHill60

Это очень, очень плохая практика хранить несколько таких значений - то есть в списке, разделенном запятыми, в одном столбце. Используйте связанную таблицу, содержащую проверенные значения со ссылкой на внешний ключ в таблице EmployeeAdd - одна строка в этой связанной таблице на флажок на сотрудника

SuperJWP

Сотрудник использует несколько приложений, поэтому я не могу создать несколько строк для одного пользователя со всеми соответствующими приложениями, которые использует сотрудник.

Richard Deeming

В этом нет необходимости. Вы создаете одну строку для сотрудника. Затем у вас есть отдельная таблица, в которой хранятся заявки для этого сотрудника.

Поскольку у вас, по-видимому, есть стандартный список приложений, отношения "многие ко многим" были бы лучше всего.

Applications: Идентификатор Приложения, Имя
Содержит стандартный список приложений. Одна строка на приложение.

Employee: Кодсотрудника, ФИО, ...
Содержит сведения о сотруднике. Один ряд на одного сотрудника.

EmployeeApplications: Кодсотрудника, Ид_приложения
Связывает запись сотрудника с приложениями, которые они используют. Одна строка для каждого сотрудника + комбинация приложений.

Напр.:
Приложения
1 | Бизнес-Центр
2 | WineMS
3 | CPAR

Работники
1 | Е1 | ...
2 | Е2 | ...
3 | Е3 | ...

EmployeeApplications
-- Е1 использует бизнес-центр и РЦПУ:
1 | 1
1 | 3
-- E2 использует Business Central, WineMS и CPAR:
2 | 1
2 | 2
2 | 3
-- E3 использует WineMS
3 | 2

0 Ответов