Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

cintiadel

[Resolvido] Atualizar dados com GridView com checkbox

Recommended Posts

desenvolvi minha aplicação me baseando nesse tutorial :

http://www.macoratti.net/08/03/aspn_erg.htm

só que minha rotina é para atualizar a tabela, com os aprovados.

 

se eu tiro o sqldatasource no grid, ele me exibe o erro:

A DataSourceID de 'GridView1' deve ser a identificação de um controle do tipo IDataSource. Um controle com identificação 'SqlDataSource1' não pôde ser encontrado.

 

e se eu coloco sqldatasource no grid, ele me exibe o erro:

DataSource e DataSourceID estão definidos em 'GridView1'. Remova uma definição.

E nesse caso n faço a minima ideia de onde está isso, para retirar.

 

conto com a ajuda de vocês mas uma vez

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu não achei neste artigo onde ele informa o DataSourceID, você seguiu fielmente o artigo?

No artigo eu só achei o momento em que ele informa o DataSource.

 

Abraços...

então segui sim só troquei o metódo para update, tentei colocar um sqldatasourece, mas tbm da erro.

por falar em update n to consegui colocar a instrução direito tbm, n sei como colocar os todos parametros, nessa linha: Dim cmd As New SqlCommand("Update tabela where id=@id", Conn)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então não seguiu. ;)

Por que precisa de um SqlDataSource? Não tem necessidade.

 

Abraços...

eu coloquei pra ver se parava de dar o erro, mas ai começou a dar outra mensagem de erro, como relatei acima.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então não seguiu. ;)

Por que precisa de um SqlDataSource? Não tem necessidade.

Abraços...

estou como o seguinte problema no grid, se eu marco os checkbox ele atualiza na base, mas se eu desmarco os checkbox nao atualiza. segue o , deveria mudar o status para false, segue meu codigo:

 

Imports System.Data.SqlClient

Partial Class _Default
	Inherits System.Web.UI.Page
	Dim strConexao As String

	Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

		strConexao = ConfigurationManager.ConnectionStrings("conConnectionString").ConnectionString
		If Not Page.IsPostBack Then
			exibeGrid()
		End If
	End Sub

	Protected Sub btn_atualiza_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btn_atualiza.Click
		Atualiza()
	End Sub
	Sub exibeGrid()
		Dim Conn As New SqlConnection(strConexao)
		Dim dr As SqlDataReader
		Dim mySQL As String

		mySQL = "SELECT [id], [nome], [opcao], [status] FROM [tabela]"

		Dim cmd As New SqlCommand(mySQL, Conn)
		Conn.Open()

		dr = cmd.ExecuteReader
		GridView1.DataSource = dr
		GridView1.DataBind()

		Conn.Close()
	End Sub

	Sub Atualiza()
		Dim i As Integer
		For i = 0 To GridView1.Rows.Count - 1
			Dim dgItem As GridViewRow = GridView1.Rows(i)
			Dim lblid As Label = CType(dgItem.FindControl("lblid"), Label)
			Dim cb As CheckBox = CType(dgItem.FindControl("ckb1"), CheckBox)
			If cb.Checked Then
				AtualizaRegistro(CInt(lblid.Text))
			End If
		Next i
		exibeGrid()
	End Sub
	Sub AtualizaRegistro(ByVal intAln As Integer)
		Dim Conn As New SqlConnection(strConexao)
		Dim cmd As New SqlCommand("Update tabela set status=@status where id=@id", Conn)
		cmd.Parameters.Add(New SqlParameter("@id", intAln))
		cmd.Parameters.Add(New SqlParameter("@status", intAln))
		Conn.Open()
		cmd.ExecuteNonQuery()
		Conn.Close()
	End Sub

End Class

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você esta fazendo uma condição:

If cb.Checked Then
	AtualizaRegistro(CInt(lblid.Text))
End If

Se você quer ambos os casos não pode fazer essa condição.

 

Abraços...

se eu tiro essas 3 linhas n atualiza

e se deixo so AtualizaRegistro(CInt(lblid.Text)) ele atualiza todos os registros

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então além desse if, faça outro if verificando se não esta checado, ae faz o que você quer fazer.

 

Abraços...

o problema é justo mente esse n to sabendo verificar ele qdo n esta checado, como fica a sintaxe, pode me ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenta assim:

If Not cb.Checked Then
	'Seu Código
End If

Abraços...

continua colocando todos como True

segue o código:

Sub Atualiza()
		Dim i As Integer
		For i = 0 To GridView1.Rows.Count - 1
			Dim dgItem As GridViewRow = GridView1.Rows(i)
			Dim lblid As Label = CType(dgItem.FindControl("lblid"), Label)
			Dim cb As CheckBox = CType(dgItem.FindControl("ckb1"), CheckBox)
			If cb.Checked = True Then
				AtualizaRegistro(CInt(lblid.Text))
			ElseIf Not cb.Checked Then
				AtualizaRegistro(CInt(lblid.Text))
			End If
		Next i

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas dentro do outro if você mandou fazer a mesma coisa. Você deve mandar executar ações diferentes. O seu AtualizaRegistro deve estar marcando como true, cria o que não faz isso.

 

Abraços...

não to conseguindo não, tem como verificar o código que postei um pouca assima onde esta o codigo da funcao atualizaregistro?

obrigada

Compartilhar este post


Link para o post
Compartilhar em outros sites

No seu AtualizaRegistro cria um outro parâmetro para você informar se é pra marcar ou desmarcar.

Ae dependendo do if que ele entrar você passa o valor que você quer para a coluna status.

 

Abraços...

como já disse, me perdoe a ignorância, mas só sei fazer isso qdo esá checado, e não qdo está desmarcado.

se n for incomodo , poste um exemplo, se n for abusar

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não testei nada, to fazendo de cabeça aqui, deve ficar mais ou menos assim:

 

Dim i As Integer
		For i = 0 To GridView1.Rows.Count - 1
			Dim dgItem As GridViewRow = GridView1.Rows(i)
			Dim lblid As Label = CType(dgItem.FindControl("lblid"), Label)
			Dim cb As CheckBox = CType(dgItem.FindControl("ckb1"), CheckBox)
			If cb.Checked = True Then
				AtualizaRegistro(CInt(lblid.Text), 1)
			ElseIf Not cb.Checked Then
				AtualizaRegistro(CInt(lblid.Text), 0)
			End If
		Next i

Sub AtualizaRegistro(ByVal intAln As Integer, ByVal status As Integer)
		Dim Conn As New SqlConnection(strConexao)
		Dim cmd As New SqlCommand("Update tabela set status=@status where id=@id", Conn)
		cmd.Parameters.Add(New SqlParameter("@id", intAln))
		cmd.Parameters.Add(New SqlParameter("@status", status))
		Conn.Open()
		cmd.ExecuteNonQuery()
		Conn.Close()
	End Sub

Abraços...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.