Попытка пропустить столбец в выражении foreach C # - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть программа управления запасами, над которой я работаю.Способ настройки системы баз данных и таблиц состоит в том, что каждая категория представляет собой отдельную таблицу.Это необходимо, поскольку каждая категория (т. Е. Обувь, телефоны, ноутбуки) имеет разные поля для уникальной идентификации каждого продукта.Итак, я создаю таблицу, а затем добавляю столбцы с именем пользователя через оператор foreach.У меня проблема в том, что он хочет добавить столбец ID, когда он уже существует.Я попытался добавить оператор If, вложенный в foreach, но он просто нарушает цикл foreach.Я просто не нашел способ пропустить столбец идентификатора и продолжить добавление каждого из столбцов.

Вот код функции:

private void btnCreateCategory_Click(object sender, EventArgs e)
{
    List<string> FieldNames = new List<string>();

    foreach (var item in lstFieldNames.Items)
    {
        FieldNames.Add(lstFieldNames.Items.ToString());
    }

    DataTable NewCategory = new DataTable();
    NewCategory = CreateTable(FieldNames);
    dgPreviewAdd.DataSource = NewCategory;

    using (SqlConnection Connection = new SqlConnection(
       Helper.cnnVal("InventoryManager")))
    {
        using (SqlCommand command = new SqlCommand("", Connection))
        {
            command.CommandText = "Create Table tbl" + 
                NewCategory.TableName.ToString() + "(ID int)";

            Connection.Open();
            command.ExecuteNonQuery();
            Connection.Close();

            foreach (DataColumn newColumn in NewCategory.Columns)
            {
                 If( newColumn.ColumnName("ID")
                  {
                  }
                  Else
                  {
                SqlParameter colparam = new SqlParameter();
                colparam.ParameterName = "@ColumnName";
                colparam.Value = newColumn.ColumnName.ToString();

                SqlParameter tblParam = new SqlParameter();
                tblParam.ParameterName = "@TableName";
                tblParam.Value = "tbl" + NewCategory.TableName.ToString();

                command.Parameters.Add(colparam);
                command.Parameters.Add(tblParam);
                command.CommandText = "dbo.AddCategoryColumns";
                command.CommandType = CommandType.StoredProcedure;

                Connection.Open();
                command.ExecuteNonQuery();
                Connection.Close();
                }
            }

            LoadCategory catTableLoad = new LoadCategory();
            DataTable catTable = new DataTable();
            catTable = catTableLoad.getCategoryTable();

            SqlParameter param = new SqlParameter();
            param.ParameterName = "@CategoryName";
            param.Value = NewCategory.TableName.ToString();

            SqlParameter param2 = new SqlParameter();
            param2.ParameterName = "@IdNumber";
            param2.Value = catTable.Rows.Count + 1;

            command.Parameters.Add(param);
            command.Parameters.Add(param2);

            command.CommandText = "dbo.AddCategory";
            command.CommandType = CommandType.StoredProcedure;

            Connection.Open();
            command.ExecuteNonQuery();
            Connection.Close();
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 13 сентября 2018

Вы можете использовать разные для группировки категории

, не забудьте добавить с помощью System.Linq;

private void btnCreateCategory_Click(object sender, EventArgs e)
    {
        List<string> FieldNames = new List<string>();

        foreach (var item in lstFieldNames.Items)
        {
            FieldNames.Add(lstFieldNames.Items.ToString());
        }

        var grpfieldNames = FieldNames.Distinct();

        DataTable NewCategory = new DataTable();

        NewCategory = CreateTable(grpfieldNames);

        dgPreviewAdd.DataSource = NewCategory;

        using (SqlConnection Connection = new SqlConnection(
           Helper.cnnVal("InventoryManager")))
        {
            using (SqlCommand command = new SqlCommand("", Connection))
            {
                command.CommandText = "Create Table tbl" +
                    NewCategory.TableName.ToString() + "(ID int)";

                Connection.Open();
                command.ExecuteNonQuery();
                Connection.Close();

                foreach (DataColumn newColumn in NewCategory.Columns)
                {
                    If(newColumn.ColumnName("ID")
                      {
                    }
                    Else
                      {
                        SqlParameter colparam = new SqlParameter();
                        colparam.ParameterName = "@ColumnName";
                        colparam.Value = newColumn.ColumnName.ToString();

                        SqlParameter tblParam = new SqlParameter();
                        tblParam.ParameterName = "@TableName";
                        tblParam.Value = "tbl" + NewCategory.TableName.ToString();

                        command.Parameters.Add(colparam);
                        command.Parameters.Add(tblParam);
                        command.CommandText = "dbo.AddCategoryColumns";
                        command.CommandType = CommandType.StoredProcedure;

                        Connection.Open();
                        command.ExecuteNonQuery();
                        Connection.Close();
                    }
                }

                LoadCategory catTableLoad = new LoadCategory();
                DataTable catTable = new DataTable();
                catTable = catTableLoad.getCategoryTable();

                SqlParameter param = new SqlParameter();
                param.ParameterName = "@CategoryName";
                param.Value = NewCategory.TableName.ToString();

                SqlParameter param2 = new SqlParameter();
                param2.ParameterName = "@IdNumber";
                param2.Value = catTable.Rows.Count + 1;

                command.Parameters.Add(param);
                command.Parameters.Add(param2);

                command.CommandText = "dbo.AddCategory";
                command.CommandType = CommandType.StoredProcedure;

                Connection.Open();
                command.ExecuteNonQuery();
                Connection.Close();
            }
        }
    }
0 голосов
/ 13 сентября 2018

Используйте любой из этих:

foreach (DataColumn newColumn in NewCategory.Columns)
{
    if (newColumn.ColumnName == "ID") continue;

    //Rest of logic goes here
}

Или полностью исключить из цикла:

foreach (DataColumn newColumn in NewCategory.Columns.Where( c => c.ColumnName != "ID" ))
{

    //Rest of logic goes here
}
...