Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom dia,
olha estou a tentar fazer um metodo que me faça uma procura de um determinado texto q esta numa textbox e que me devolva o resultado numa grid e esotu a tentar fazer assim:
CODE
Protected Sub ButtonProc_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ButtonProc.Click
If Page.IsValid Then
Dim dr As SqlDataReader = Nothing
Dim conn As New SqlConnection(ConfigurationManager.ConnectionStrings("SLConnectionString").ToString)
Dim objCommand As SqlCommand
Try
conn.Open()
objCommand = New SqlCommand("usp_ProcuraLinha", conn)
objCommand.CommandType = CommandType.StoredProcedure
objCommand.Parameters.Add("@lintaginicio", SqlDbType.Char)
objCommand.Parameters("@lintaginicio").Value = TextBoxProc.Text
'objCommand.ExecuteNonQuery()
dr = objCommand.ExecuteReader(CommandBehavior.CloseConnection)
If dr.HasRows Then
GridView1.DataBind()
Me.GridView1.Visible = True
Else
Me.Label5.Visible = True
Me.GridView1.Visible = False
End If
Catch ex As SqlException
'Response.Write(ex.ToString)
Response.Redirect("~/errordb.aspx")
Finally
conn.Close()
End Try
End If
Me.DataGridAreaInvestigacao.Visible = False
'Me.GridView1.DataBind()
'Me.GridView1.Visible = True
End Sub
onde a query é a seguinte:
ALTER procedure [dbo].[usp_ProcuraLinha]
@lintaginicio varchar (255)
as select *
From Linhas where LIN_TAGINI_ID Like @lintaginicio
e o q se esta a passar é o seguinte :
ele se nao existir linhas entao devolve a msg de erro q tenho na label5 ate aqui tudo correcto, mas se existe essa linha que eu insiro mostra-me na grid todos os registos existentes nessa tabela e eu queria que me mostra-se apenas por ex o registo y7u8i89 da-me a ideia que ele faz o bind de tudo e eu queria que ao fazero bind mostra-se sim todos os campos mas so afectos a este registo y7u8i89 .
Obrigado a todos desde ja.
sim penso q esta , obrigado
Você terá que criar seu parametro de busca na sua procedure também, pois é ela que filtra os dados.
Abraços...
oi Bruno e como crio esse parametro? na sp pois eu penso q ja o estou fazendo na stored procedure
É não tinha reparado, basta você chamar sua Store Procedure com o valor preenchido no TextBox então.
Abraços...
oi Bruno pois mas eu estou fazendo isso dentro do bloco try e nao esta a funcionar
Estranho cara, você ja tentou passar esse parametro direto no seu gerenciador de banco e dados pra ver se a procedure esta trazendo os dados filtrados corretamente??
Abraços...
sim bruno ja passei esse parametro directo no sql e esta filtrando correctamente
Crie um breakpoint na linha GridView1.DataBind() e veja qual é a coleção que ele realmente esta tratando.
Não acho que seja a mesma do 'dr'.
Poste aqui o código do GridView para vermos o DataSource, etc.
Obrigado pela ajuda amigo mas tou dando em tolo o codigo do meu grid é:
CODE
<asp:GridView DataKeyNames="LIN_ID" Width="100%" ID="GridView1" runat="server" BorderWidth="0px" AutoGenerateColumns="False" DataSourceID="SqlDataSourcecarregaDG2" AllowPaging="True" AllowSorting="True">
<Columns>
<asp:TemplateField HeaderText="Ver" ShowHeader="False">
<ItemTemplate>
<asp:ImageButton ID="LinkButton1" runat="server" CausesValidation="false" CommandName="Select"
ImageUrl="~/imagens/ZoomHS.png"></asp:ImageButton>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="LIN_ID" HeaderText="Identificação" SortExpression="LIN_ID" />
<asp:BoundField DataField="LIN_TAGINI_ID" HeaderText="Tag Início" SortExpression="LIN_TAGINI_ID" />
<asp:BoundField DataField="LIN_TAGFIN_ID" HeaderText="Tag Fim " SortExpression="LIN_TAGFIN_ID" />
<asp:BoundField DataField="LIN_ANO_PL" HeaderText="Ano Plantação " SortExpression="LIN_ANO_PL" />
<asp:TemplateField ShowHeader="False" HeaderText="Apagar">
<ItemTemplate>
<asp:CheckBox ID="chk1" runat="server" />
<asp:Label ID="Label9" runat="server" Visible="false" Text='<%# Bind("LIN_ID") %>' ></asp:Label>
</ItemTemplate>
<ItemStyle HorizontalAlign="Center" />
</asp:TemplateField>
</Columns>
<FooterStyle BackColor="#990000" ForeColor="White" Font-Bold="True" />
<RowStyle BackColor="#D1EEEE" HorizontalAlign="Center" ForeColor="#333333" />
<SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="Navy" />
<PagerStyle BackColor="#FFCC66" ForeColor="#333333" HorizontalAlign="Center" />
<HeaderStyle BackColor="White" Font-Bold="True" ForeColor="#8B4726" />
<AlternatingRowStyle BackColor="White" />
</asp:GridView>
Obrigado a todos
Pronto, está dada a resposta. Seu GridView se baseia em um DataSoucer que não é a resposta do filtro feito pelo objCommand.ExecuteReader().
Remova o DataSourceID do GridView e, em tempo de execução, faça o seguinte:
...
'objCommand.ExecuteNonQuery()
dr = objCommand.ExecuteReader(CommandBehavior.CloseConnection)
If dr.HasRows Then
GridView1.DataSource = dr
GridView1.DataBind()
Me.GridView1.Visible = True
...
Não sou bom em VB, mas a idéia é essa...
PS: Não esqueça de apagar a definição DataSourceID.
vou tentar fazer isso fico agradecido por sua ajuda
Sua coleção de retorno é o 'dr', que é preenchido por um ExecuteReader.
Você tem certeza que o seu GridView está está fazendo DataBind no dr?