【发布时间】:2021-07-05 02:30:56
【问题描述】:
好的,两天后我从表格工作中得到了网格和最大 ID,现在是新问题: 如何在数据表 dtprodisp 上的 gridview 上插入所有产品 我插入了第一个产品,但不知道要执行 for 循环并且不重复任何已插入的产品
private void Btngravar_Click(object sender, EventArgs e)
{
MySqlConnection conn = new MySqlConnection("ConnectionString");
conn.Open();
MySqlCommand objcmd = new MySqlCommand("insert into dispensacao (DESTINATARIO,COD_UNIDADE,COD_DEPARTAMENTO,DATA,SOLICITANTE,DEFERIDO_POR) values(?,?,?,?,?,?)", conn);
objcmd.Parameters.Add("@DESTINATARIO", MySqlDbType.VarChar, 45).Value = Cmbdestinatario.Text;
objcmd.Parameters.AddWithValue("@COD_UNIDADE", string.IsNullOrEmpty(Txtcodigounidade.Text) ? (object)DBNull.Value : Txtcodigounidade.Text);
objcmd.Parameters.AddWithValue("@COD_DEPARTAMENTO", string.IsNullOrEmpty(Txtcodigodep.Text) ? (object)DBNull.Value : Txtcodigodep.Text);
DateTime fdate = DateTime.Parse(Txtdata.Text);
objcmd.Parameters.Add("@DATA", MySqlDbType.DateTime).Value = fdate;
objcmd.Parameters.Add("@SOLICITANTE", MySqlDbType.VarChar, 45).Value = Txtsolicitante.Text;
objcmd.Parameters.Add("@DEFERIDO_POR", MySqlDbType.VarChar, 45).Value = Txtdeferido.Text;
objcmd.ExecuteNonQuery();
conn.Close();
conn.Open();
objcmd = new MySqlCommand("insert into produtos_disp(CODIGO_DISP,PRODUTO,QUANTIDADE,CODIGO_PROD) values (?,?,?,?)", conn);
objcmd.Parameters.AddWithValue("@CODIGO_DISP", Cmbid.Text);
objcmd.Parameters.AddWithValue("@PRODUTIO", dtproddisp.Rows[0]["descricao"]);
objcmd.Parameters.AddWithValue("@QUANTIDADE", dtproddisp.Rows[0]["quantidade"]);
objcmd.Parameters.AddWithValue("@COD_PRODUTO", dtproddisp.Rows[0]["codigo"]);
objcmd.ExecuteNonQuery();
this.Close();
}
这是代码,它适用于第一行
dtproddisp.Rows.Add(Txtcodigopro.Text, Txtproduto.Text, Txtquantidade.Text);
我需要改变它吗? 出于某种原因,将数据添加到 dtprodisp DataTable 的代码没有得到 codigo,几分钟前还在工作,我没有改变任何东西:
private void Btnaddproduto_Click(object sender, EventArgs e)
{
dtproddisp.Rows.Add(Txtcodigopro.Text, Txtproduto.Text, Txtquantidade.Text);
Gridprodutos.DataSource = dtproddisp;
}
其他两个领域都在工作 获取“DESCRICAO”和“CODIGO”的代码:
private void Txtproduto_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
MySqlConnection connection = new MySqlConnection("connectionString");
string selectQuery = "select descricao,codigo from produtos where barras =" + (Txtproduto.Text);
connection.Open();
MySqlCommand command = new MySqlCommand(selectQuery, connection);
MySqlDataReader reader = command.ExecuteReader();
if(reader.Read())
{
Txtproduto.Text = reader.GetString("DESCRICAO");
Txtcodigopro.Text = reader.GetString("CODIGO");
}
}
}
【问题讨论】:
-
不清楚你在问什么。如果你想插入数据表中的所有行,那么一个简单的
for或foreach循环遍历表的行就可以了。在每次迭代中,清除先前的参数并使用该特定行中的值重新添加参数。我猜这可能是你要问的。 -
foreach循环是空的有什么原因吗?您也可以像在上一个循环中所做的那样使用for循环。两者都会完成同样的事情。 -
只是设置在那里以显示我正在尝试的内容
-
objcmd.Parameters.AddWithValue("@anyText", dtproddisp.Rows['i']['j']);任何想法都会引发错误
-
您需要显示您正在使用的代码,因为当前代码不会编译。您将在...
foreach ()处收到代码行错误...这是无效的,代码将无法编译。所以我不确定你会如何在线上得到一个执行错误……objcmd.Parameters.AddWithValue("@anyText", dtproddisp.Rows['i']['j']);……我只能猜测i和j的另一个编译错误,因为它们超出了范围并且在技术上不存在。请edit您的问题与您更新的代码。