如何将数据网格视图中的多个行值插入到表的单个字段中

本文关键字:插入 字段 单个 数据网 数据 网格 视图 | 更新日期: 2023-09-27 18:31:30

我得到了一个表格,我在其中列出了客户想要购买的文章,我需要将所有文章名称保存到一个字段中,如下所示: article 1, article 2, article 3所以当我打印报告时,我可以看到一行中的所有文章,但我真的不知道该怎么做 我尝试了几种方法,但我唯一能做的就是计算 ammount行,顺便说一下,我使用参数在其他字段中插入值,所以我无法让它更改查询,这就是我正在使用的:

private void btnfacturar_Click(object sender, EventArgs e)
{
    var articulos = new List<string>(); 
    var combinedString = string.Empty;
    foreach (DataGridViewRow row in dataGridView1.Rows) 
    { 
       string strArticulos = row.Cells["Articulos"].Value.ToString();
       articulos.Add(strArticulos); //this should make it easier for you to understand
    }
    combinedString = string.Join<string>(" ", articulos);
   try
   {
    System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection(@"Data Source=USER-PC;Initial Catalog=dbpuntodeventa;Integrated Security=True");
    System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand();
    cmd.Connection = conn;
    cmd.CommandText = "INSERT INTO equipos VALUES (@nombre,@estado,@servicio,@fechaderecepcion,@nombredecliente, @apellido, @edad, @documento,@tipodedocumento,@email,@telefono,@direccion,@imagen,@piezas,@tipodepago,@abono,@garante,@preciodepiezas,@manodeobra,@total,@devuelta,@descuento,@imagendedocumento,@pago,@itbis,@tamaño,@capacidad,@marca,@modelo)";
    cmd.Parameters.Add("@nombre", System.Data.SqlDbType.VarChar, 30);
    cmd.Parameters.Add("@estado", System.Data.SqlDbType.VarChar, 100);
    cmd.Parameters.Add("@servicio", System.Data.SqlDbType.VarChar, 40);
    cmd.Parameters.Add("@fechaderecepcion", System.Data.SqlDbType.VarChar, 30);
    cmd.Parameters.Add("@nombredecliente", System.Data.SqlDbType.VarChar, 10);
    cmd.Parameters.Add("@apellido", System.Data.SqlDbType.VarChar, 25);
    cmd.Parameters.Add("@edad", System.Data.SqlDbType.Int);
    cmd.Parameters.Add("@documento", System.Data.SqlDbType.VarChar, 13);
    cmd.Parameters.Add("@tipodedocumento", System.Data.SqlDbType.VarChar);
    cmd.Parameters.Add("@email", System.Data.SqlDbType.VarChar, 35);
    cmd.Parameters.Add("@telefono", System.Data.SqlDbType.VarChar, 12);
    cmd.Parameters.Add("@direccion", System.Data.SqlDbType.VarChar, 50);
    cmd.Parameters.Add("@imagen", System.Data.SqlDbType.Image);
    cmd.Parameters.Add("@piezas", System.Data.SqlDbType.VarChar, 100);
    cmd.Parameters.Add("@tipodepago", System.Data.SqlDbType.VarChar, 15);
    cmd.Parameters.Add("@abono", System.Data.SqlDbType.VarChar, 10);
    cmd.Parameters.Add("@garante", System.Data.SqlDbType.VarChar, 30);
    cmd.Parameters.Add("@preciodepiezas", System.Data.SqlDbType.VarChar, 30);
    cmd.Parameters.Add("@manodeobra", System.Data.SqlDbType.VarChar, 30);
    cmd.Parameters.Add("@total", System.Data.SqlDbType.VarChar, 30);
    cmd.Parameters.Add("@devuelta", System.Data.SqlDbType.VarChar, 30);
    cmd.Parameters.Add("@descuento", System.Data.SqlDbType.VarChar, 5);
    cmd.Parameters.Add("@imagendedocumento", System.Data.SqlDbType.Image);
    cmd.Parameters.Add("@pago", System.Data.SqlDbType.VarChar, 30);
    cmd.Parameters.Add("@itbis", System.Data.SqlDbType.VarChar, 30);
    cmd.Parameters.Add("@tamaño", System.Data.SqlDbType.VarChar, 5);
    cmd.Parameters.Add("@capacidad", System.Data.SqlDbType.VarChar, 100);
    cmd.Parameters.Add("@marca", System.Data.SqlDbType.VarChar, 50);
    cmd.Parameters.Add("@modelo", System.Data.SqlDbType.VarChar, 50);

    cmd.Parameters["@nombre"].Value = equipoTextBox.Text;
    cmd.Parameters["@estado"].Value = estadoTextBox.Text;
    cmd.Parameters["@servicio"].Value = servicioComboBox.Text;
    cmd.Parameters["@fechaderecepcion"].Value = txtfecha.Text;
    cmd.Parameters["@nombredecliente"].Value = nombreTextBox.Text;
    cmd.Parameters["@apellido"].Value = apellidoTextBox.Text;
    cmd.Parameters["@edad"].Value = edadTextBox.Text;
    cmd.Parameters["@documento"].Value = documentoMaskedTextBox.Text;
    cmd.Parameters["@tipodedocumento"].Value = tipodedocumentoComboBox.Text;
    cmd.Parameters["@email"].Value = emailTextBox.Text;
    cmd.Parameters["@telefono"].Value = telefonoMaskedTextBox.Text;
    cmd.Parameters["@direccion"].Value = direccionTextBox.Text;
    System.IO.MemoryStream ms = new System.IO.MemoryStream();
    imagenPictureBox.Image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
    cmd.Parameters["@imagen"].Value = ms.GetBuffer();
    cmd.Parameters["@piezas"].Value = articulos;
    cmd.Parameters["@tipodepago"].Value = cbtipodepago.Text;
    cmd.Parameters["@abono"].Value = txtabono.Text;
    cmd.Parameters["@garante"].Value = txtgarante.Text;
    cmd.Parameters["@preciodepiezas"].Value = txtpreciodepiezas.Text;
    cmd.Parameters["@manodeobra"].Value = txtmanodeobra.Text;
    cmd.Parameters["@total"].Value = txttotal.Text;
    cmd.Parameters["@devuelta"].Value = txtsobrante.Text;
    cmd.Parameters["@descuento"].Value = cbdescuento.Text;
    System.IO.MemoryStream msi = new System.IO.MemoryStream();
    imagendedocumentoPictureBox.Image.Save(msi, System.Drawing.Imaging.ImageFormat.Jpeg);
    cmd.Parameters["@imagendedocumento"].Value = msi.GetBuffer();
    cmd.Parameters["@pago"].Value = txtpago.Text;
    cmd.Parameters["@itbis"].Value = txtitbis.Text;
    cmd.Parameters["@tamaño"].Value = tamañoTextBox.Text;
    cmd.Parameters["@capacidad"].Value = capacidadTextBox.Text;
    cmd.Parameters["@marca"].Value = marcaTextBox.Text;
    cmd.Parameters["@modelo"].Value = modeloTextBox.Text;
    conn.Open();
    cmd.ExecuteNonQuery();
    conn.Close();
    MessageBox.Show("Exito");
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message.ToString());
    }
    if (txtgarante.Text == "")
    {
                frmfactura frma = new frmfactura();
                frma.ShowDialog();
    }
    else
    {
      frmrecibo frm = new frmrecibo();
      frm.ShowDialog();
      frmfactura2 frmi = new frmfactura2();
      frmi.ShowDialog();
    }
}            

如何将数据网格视图中的多个行值插入到表的单个字段中

如果此代码有效,则执行以下操作,将列表中的字符串存储到单个string变量中

var articulos = new List<string>(); 
var combinedString = string.Empty;
foreach (DataGridViewRow row in dataGridView1.Rows) 
{ 
   string strArticulos = row.Cells["Articulos"].Value.ToString();
   articulos.Add(strArticulos); //this should make it easier for you to understand
}
combinedString = string.Join<string>(" ", articulos);

这将让所有文章用" "分隔,例如文章 1 Artice2 文章 3 字符串组合字符串 = 字符串。Join(" ", articulos);

我会string.Join<string>(" "尝试这部分并尝试其他分隔符,例如*, , #但在尝试插入 SQL Server 时使用特殊字符时要小心,它被视为Injection,我会坚持使用,逗号分隔符或空格" " 例如

如果您想调用上述方法,那么这里是以下内容

var combinedStr = InsertConcatValuesIntoDB(articulos);
private static stringInsertConcatValuesIntoDB(List<string> aList)
{
    string combinedString = string.Join<string>(" ", aList);
    return combinedString;
}

此行 cmd.Parameters["@piezas"]。值 = articulos;' 应该是这个

cmd.Parameters["@piezas"].Value = combinedStr;