SQL Server - Filtrar datos de un datagrid por varios conceptos

   
Vista:

Filtrar datos de un datagrid por varios conceptos

Publicado por julian jgrsoft@gmail.com (3 intervenciones) el 30/01/2013 00:53:33
hola
estoy haciendo un programilla en vb net 2008, que guarda datos a una base de datos sql server 2008. mi problema es que quiero filtrar los datosque me aparecen en un datagridview pero por varios conceptos a la vez, es decir, tengo los siguientes campos: "lote"," tipo" y "num_linea". lo que quiero es poder filtrar con estos 3 campos a la vez, porque individualmente no hay problema.
Lo que quiero es un procedimiento almacenado que me permita buscar por estos 3 conceptos al mismo tiempo.
Basicamente en vb net tengo 3 textbox, uno por campo, en los cuales hago la busqueda y que harían una llamada a ese procedimiento almacenado, pero no se como hacerlo.
necesito ayuda urgente
gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias

Filtrar datos de un datagrid por varios conceptos

Publicado por Isaias (3181 intervenciones) el 30/01/2013 17:59:59
¿Tienes ya el query, que hace la consulta?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Filtrar datos de un datagrid por varios conceptos

Publicado por julian (3 intervenciones) el 31/01/2013 00:17:08
no se a que te refieres exactamente, te explico a mi manera (soy bastante nuevo en estos temas).
desde sql tengo un procedimiento almacenado para filtrar por lote que es el siguiente :
1
2
3
4
5
ALTER PROCEDURE [dbo].[sp_buscarxlote]
@lote nvarchar(50)='%'
as
select * from LAB
where lote like @lote + '%'


el cual es llamado desde vb net 2008 con el siguiente codigo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Sub buscarxlote()
        cn.Open()
        Dim da As New SqlDataAdapter("sp_buscarxlote", cn)
        da.SelectCommand.CommandType = CommandType.StoredProcedure
        da.SelectCommand.Parameters.AddWithValue("@lote", Me.txtbuscarlote.Text)
        Dim dt As New DataTable
        da.Fill(dt)
        Me.DataGridView1.DataSource = dt
        cn.Close()
    End Sub
 
Private Sub txtbuscar_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtbuscarlote.TextChanged
        buscarxlote()
    End Sub


para hacer la busqueda del lote simplemente, funciona genial, el problema es no se como filtrar por otros campos de la base de datos conjuntamente ;es decir digamos que tengo 3 textbox para hacer busquedas, uno por lote, otro por num_linea y otro por tipo, como puedo hacer una busqueda de un lote determinado, de un num_linea determinado y un tipo de material determinado, todo eso conjuntamente y no cada uno por separado.
espero que entendais mi problema
gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Filtrar datos de un datagrid por varios conceptos

Publicado por JuanCo (2 intervenciones) el 02/02/2013 16:53:03
podrías usar una consulta de esta forma

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
ALTER PROCEDURE sp_buscarxlote
	@lote nvarchar(50)=''
	@filtro2 Char(10)='',
	@filtro3 Char(10)=''
as
Set @lote = Isnull(@lote, '')
Set @filtro2 = Isnull(@filtro2, '')
Set @filtro3 = Isnull(@filtro3, '')
 
select
	*
From
	LAB
Where
	lote = Case When @lote = '' Then Lote Else @lote End and
	Campo2 = Case When @filtro2 = '' Then Campo2 Else @filtro2 End and
	Campo3 = Case When @filtro3 = '' Then Campo3 Else @filtro3 End


le pasas los parámetros desde .net
Personalmente me funciona bien en tablas de menos de 10' de reg, cuando son tablas mas grandes, es mejor usar SP's separados y si se puede indexar mejora aun mas.
otrosi, evita abusar del uso del like tiende a ser mas lentas las consultas así el campo este indexado
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Filtrar datos de un datagrid por varios conceptos

Publicado por julian (3 intervenciones) el 03/02/2013 00:44:48
creo que hemos dado un paso hacia delante, pero aun hay algun problema.
situacion:esto el como me quedó el procedimiento almacenado
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
USE [LABORATORIO]
GO
/****** Object:  StoredProcedure [dbo].[sp_buscar]    Script Date: 02/02/2013 22:58:37 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[sp_buscar]
 @Lote nvarchar(50)='',
 @LINEA nvarchar(10)='',
 @TIPO_tubo nvarchar(50)=''
 as
 Set @Lote = Isnull(@Lote, '')
 Set @LINEA = Isnull(@LINEA, '')
 Set @TIPO_tubo = Isnull(@TIPO_tubo, '')
 
select * From LAB
 Where Lote = Case When @Lote = '' Then Lote Else @Lote End and
 LINEA = Case When @LINEA = '' Then LINEA Else @LINEA End and
 TIPO_tubo = Case When @TIPO_tubo = '' Then TIPO_tubo Else @TIPO_tubo End
 
y el codigo de visual basic net es el siguiente:
----------conectar con la base de datos sql--------------------
Imports System.Data.SqlClient
Public Class MOSTRAR_DATOS
    Dim cn As New SqlConnection("Data Source=SSD-PC\SQLEXPRESS;Initial Catalog=LABORATORIO;Integrated Security=True")
-------------rutina para mostrar los datos en el datagridview--------------
    Sub mostrar()
        Dim da As New SqlDataAdapter("VERTODOS_REGISTROS", cn)
        Dim ds As New DataSet
        da.Fill(ds, "LAB")
        Me.DataGridView1.DataSource = ds.Tables(0)
    End Sub
----------rutina para buscar datos ---------------------------------------
    Sub buscar()
        cn.Open()
        Dim da As New SqlDataAdapter("sp_buscar", cn)
        da.SelectCommand.CommandType = CommandType.StoredProcedure
        da.SelectCommand.Parameters.AddWithValue("@Lote", Me.TextBox1.Text)
        da.SelectCommand.Parameters.AddWithValue("@LINEA", Me.TextBox2.Text)
        da.SelectCommand.Parameters.AddWithValue("@TIPO_tubo", Me.TextBox3.Text)
        Dim dt As New DataTable
        da.Fill(dt)
        Me.DataGridView1.DataSource = dt
        cn.Close()
    End Sub
--------------mostrar los datos en el datagrid al cargar el formulario------------------
 Private Sub MOSTRAR_DATOS_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        mostrar()
    End Sub
------------buscar en cada uno de los textbox para filtrar el datagridview-------------
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
        buscar()
 
    End Sub
 
    Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged
        buscar()
 
    End Sub
 
    Private Sub TextBox3_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox3.TextChanged
        buscar()
 
    End Sub
End Class


ahora mi problema es que cuando filtro por linea va genial , pero cuando intento filtrar por lote o TIPO_tubo, no funciona, solo sale el datagridview en blanco.
a ver si alguien me puede ayudar
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Filtrar datos de un datagrid por varios conceptos

Publicado por JOSE (1 intervención) el 18/11/2014 14:47:19
Yo probaria a utilizar esto http://www.soulsmakers.com/blog/index.php?id=21t8r237 tirandolo normal, si procedimiento almacenado , a ver que trae, o a lo mejor te puede servir para otras cosas
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar