El cuadro de texto de la función de búsqueda no funciona correctamente en c#.
Mi código:
private void txtSearch_TextChanged(object sender, EventArgs e)
{
if (txtSearch.Text == “”)
{
DGViewListItems.Rows.Clear();
populateTable();
}
else
{
if (byItemcode.Checked == true)
{
DGViewListItems.Rows.Clear();
using (SqlConnection con = db.Connect())
{
try
{
//estos MessageBox son solo para pruebas. para comprobar si los datos son correctos
MessageBox.Show(“‘” + STEntry.whseFr.Text.Trim() + “‘”);
MessageBox.Show(“‘” + txtSearch.Text.Trim() + “‘”);
SqlDataReader rd;
SqlCommand cmd = new SqlCommand(“sp_WhseItemsList”, db.Connect());
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue(“@Action”, “I”);
switch (activeform.formname)
{
case “Issuance List”:
//cmd.Parameters.AddWithValue(“@WHSE”, STEntry.whseFr.Text);
break;
case "Stocks Transfer List":
cmd.Parameters.AddWithValue("@WHSE", STEntry.whseFr.Text.Trim());
break;
case "Stocks Adjustment List":
cmd.Parameters.AddWithValue("@WHSE", SADJEntry.txtWhse.Text.Trim());
break;
}
cmd.Parameters.AddWithValue("@Desc", "");
cmd.Parameters.AddWithValue("@Itemcode", '%' + txtSearch.Text.Trim() + '%');
rd = cmd.ExecuteReader();
int i = 0;
if (rd.HasRows)
{
while (rd.Read())
{
DGViewListItems.Rows.Add();
DGViewListItems.Rows[i].Cells["itemcode"].Value = rd["itemcode"].ToString();
DGViewListItems.Rows[i].Cells["whsecode"].Value = rd["whsecode"].ToString();
DGViewListItems.Rows[i].Cells["description"].Value = rd["description"].ToString();
DGViewListItems.Rows[i].Cells["uom"].Value = rd["uom"].ToString();
DGViewListItems.Rows[i].Cells["quantity"].Value = rd["quantity"].ToString();
i++;
}
}
}
catch (Exception ex)
{
}
}
}
else if (byDescription.Checked == true)
{
}
}
}
Esto no funciona para mí, porque no completa el dgv correctamente. No creo que la consulta sea el problema dentro del procedimiento almacenado, porque probé la consulta manualmente y funciona bien.
La consulta que probé:
SELECT DISTINCT A.*, B.description, B.uom
FROM inventoryTable A
LEFT OUTER JOIN Items B
ON A.itemcode = B.itemcode WHERE (A.whsecode = ‘WHSE1’ AND A.itemcode LIKE ‘%S%’);
La salida:
Y aquí está la salida para el código en el evento TextChanged:
Aquí hay más ejemplo de salida:
Este es el contenido del procedimiento almacenado como referencia:
ALTER PROCEDURE [dbo].[sp_WhseItemsList]
@Action char(5) = ”,
@WHSE char(15) = ”,
@Desc varchar(50) = ”,
@Itemcode char(15) = ”
AS
BEGIN
— SET NOCOUNT ON se agregó para evitar resultados adicionales de
— interferir con las declaraciones SELECT.
SET NOCOUNT ON;
IF @Action = 'A'
BEGIN
SELECT DISTINCT A.*, B.description, B.uom
FROM inventoryTable A
LEFT OUTER JOIN Items B
ON A.itemcode = B.itemcode WHERE A.whsecode = @WHSE;
END
IF @Action = 'I'
BEGIN
SELECT DISTINCT A.*, B.description, B.uom
FROM inventoryTable A
LEFT OUTER JOIN Items B
ON A.itemcode = B.itemcode WHERE (A.whsecode = @WHSE) AND (A.itemcode LIKE @Itemcode);
END
IF @Action = 'D'
BEGIN
SELECT DISTINCT A.*, B.description, B.uom
FROM inventoryTable A
LEFT OUTER JOIN Items B
ON A.itemcode = B.itemcode WHERE (A.whsecode = @WHSE) AND (B.description LIKE @Desc);
END
END
davy.ai
Problema al poblar DataGridView en C# y SQL
El código no está poblando correctamente el DataGridView, a pesar de que la consulta usada en el procedimiento almacenado funciona correctamente. Por lo tanto, el problema reside en el código en sí mismo.
En el evento
txtSearch_TextChanged
, se está verificando la condiciónbyItemCode
y ejecutando una consulta SQL. Sin embargo, al agregar las filas al DataGridView, los nombres de columna no se están estableciendo correctamente. Esto podría estar causando el problema de que los datos no se muestren como se espera.Además, hay una sección de código comentada donde el parámetro
@WHSE
se establece en función del nombre del formulario activo. Esto podría causar problemas si el formulario elegido no coincide con ninguna de las condicionescase
. Es mejor establecer explícitamente el valor del parámetro@WHSE
en lugar de comentar el código.Para solucionar el problema, revisar los nombres de columna agregados al DataGridView y asegurarse de que coincidan con la declaración
select
en el procedimiento almacenado. Además, considerar establecer explícitamente el valor del parámetro@WHSE
en lugar de confiar en el código comentado.Sugerencias de Mejora
catch
.