Как объединить значения строк Datagridview и сохранить их в одну ячейку с данными

У меня есть datagridview с одним столбцом, я хочу объединить значения строк datagridview и

вставьте их в одну ячейку с данными. Это код, который я пробовал

private string  concatArticle()
    {
        string libArt = null;

        foreach(DataGridViewRow row1 in ListeArt.Rows)
        {
            if (row1 != null)
            {
                libArt = string.Join(",", row1.Cells.Cast<DataGridViewCell>().Select(c => c.Value.ToString()).ToArray());
            }
        }
        return libArt;
    }

и это код вставки значений:

SqlCommand CmdService = new SqlCommand("INSERT INTO BonCommande (NumeroBon, LibArticle, Quantite, DateBon)" +
                    "VALUES (@NumeroBon, @LibArticle, @Quantite, @DateBon)", con4);

                CmdService.Parameters.AddWithValue("@NumeroBon", numeroBonTextBox.Text);
                CmdService.Parameters.AddWithValue("@LibArticle", concatArticle());
                CmdService.Parameters.AddWithValue("@Quantite",  Convert.ToInt32(quantiteTextBox.Text));
                CmdService.Parameters.AddWithValue("@DateBon", Convert.ToDateTime(dateBonDateTimePicker.Text));

                CmdService.ExecuteNonQuery();

Но когда я выполняю этот код, я получаю это сообщение об ошибке

NullReferenceException: ссылка на объект не указывает на экземпляр объекта.

Где ошибка??

Заранее спасибо.


person user4374239    schedule 30.12.2014    source источник
comment
У ваших текстовых полей есть значения?   -  person Mairaj Ahmad    schedule 30.12.2014
comment
в какой строке вы получаете ошибку   -  person Microsoft DN    schedule 30.12.2014
comment
да есть значения в строках   -  person user4374239    schedule 30.12.2014
comment
ошибка здесь: libArt = string.Join(,, row1.Cells.Cast‹DataGridViewCell›().Select(c =› c.Value.ToString()).ToArray());   -  person user4374239    schedule 30.12.2014


Ответы (3)


Попробуй это:

libArt +=  string.Join(",", row1.Cells.Cast<DataGridViewCell>().Where(c => c.Value != null).Select(c => c.Value.ToString()).ToArray());
person user4340666    schedule 30.12.2014

Значение в вашей ячейке null

Сначала выполните нулевую проверку:

string.Join(",", row1.Cells.Cast<DataGridViewCell>().Where( c => c.Value != null ).Select( c => c.Value.ToString()).ToArray());
person Sievajet    schedule 30.12.2014
comment
Проверьте сгенерированную строку, по-видимому, она недействительна для вашего параметра. Вам придется отладить это - person Sievajet; 30.12.2014
comment
Когда я попробовал ваш код, ошибка исчезла, но в таблицу BonCommande ничего не вставлено (все значения вставлены, кроме LibArticle), где ошибка ?? - person user4374239; 30.12.2014
comment
я предполагаю, что значение ячейки LibArticle в сетке равно нулю, поэтому параметр также равен нулю. отладить это - person Sievajet; 30.12.2014
comment
Отладка, почему sqlparameter имеет значение null - person Sievajet; 30.12.2014
comment
Извините, я не понимаю, вы можете объяснить больше - person user4374239; 30.12.2014
comment
Ваш метод concatArticle возвращает строку, которую вы используете для параметра sql @LibArticle. Очевидно, вы подозреваете, что в этом параметре установлено какое-то значение. Но этого не происходит. Отладьте метод concatArticle, какое значение генерируется и почему используемый вами sqlstatement не содержит значения сетки. - person Sievajet; 30.12.2014
comment
Ах, спасибо за объяснение, я делаю это и обнаружил, что concatArticle возвращает нулевое значение, я не знаю, почему !!! - person user4374239; 30.12.2014

Попробуй это-

private string  concatArticle()
{
    string libArt = string.Join(", ", ListeArt.Rows.OfType<DataGridViewRow>()
                   .Select(i => i.Cells["yourColumnName"].Value.ToString()).ToArray());
    return libArt;
}
person Microsoft DN    schedule 30.12.2014
comment
NullReferenceException: ссылка на объект не указывает на экземпляр объекта. - person user4374239; 30.12.2014