Jump to content
electric

Procurar numa datagridview melhor opção?

Recommended Posts

electric

Boas, eu sei que titulo do topico pode parcer outro igual aos que ai anda, a verdade é que tou farto de procurar e tentar mas nao estou a conseguir...

IDEIA:

1- tenho uma base de dados que sera preenchida

2 - dados sao expostos numa datagridview apenas com 1 linda e 4 colunas

3 - tenho 4 variaveis que serao preenchidas com os respectivos valores da celulas

4 - se a celulas 1 estiver preenchida preenche uma checkbox e passa para a celula 2 e assin sucessivamente

5 - caso a ultima preenchida for a 2 vai executar uma linha que vai escrever no campo 3

bem eu tentei um pouco de tudo, if then, select case, for each

no caso do select case tive mais sucesso no entanto mas se a base de dados tiver o campo 1 e 2 preenchidos e o campo 3 nao .. da erro :\

vou deixar aqui os codigos...

Sub preenchervariaveis()
 'VARIAVEIS
 Dim E1 As String = ""
 Dim S1 As String = ""
 Dim E2 As String = ""
 Dim S2 As String = ""
 CbxEmanha.Checked = False
 CbxSmanha.Checked = False
 CbxEtarde.Checked = False
 CbxStarde.Checked = False

 If DgvEntradaesaida.CurrentCell Is Nothing Then
	 MsgBox("Tecnico ainda nao fez a picagem!")
 Else
	 For Each row As DataGridViewRow In DgvEntradaesaida.Rows
		 Dim i As Integer = 1
		 If DgvEntradaesaida.Rows(0).Cells(i).Value <> String.Empty Then
			 MsgBox("esta vazio")
			 i = i + 1
			 MsgBox(i)
		 End If
	 Next
	 'Dim preenchercbx As Integer
	 'Select Case preenchercbx
	 ' Case E1 = DgvEntradaesaida.Rows(0).Cells(0).Value = True
	 '	 CbxEmanha.Checked = True
	 '	 MsgBox("1")
	 ' Case S1 = DgvEntradaesaida.Rows(0).Cells(1).Value = True
	 '	 CbxSmanha.Checked = True
	 '	 MsgBox("2")
	 ' Case E2 = DgvEntradaesaida.Rows(0).Cells(2).Value = True
	 '	 CbxEtarde.Checked = True
	 '	 MsgBox("3")
	 ' Case S2 = DgvEntradaesaida.Rows(0).Cells(3).Value = True
	 '	 CbxStarde.Checked = True
	 '	 MsgBox("4")
	 'End Select
	 'If E1 = DgvEntradaesaida.Rows(0).Cells(0).Value = True Then
	 ' CbxEmanha.Checked = True
	 'End If
	 'If S1 = DgvEntradaesaida.Rows(0).Cells(1).Value = True Then
	 ' CbxSmanha.Checked = True
	 'End If
	 'Dim preenchercbx As Integer
	 'Select Case preenchercbx
	 ' Case E1 = DgvEntradaesaida.Rows(0).Cells(0).Value <> String.Empty And S1 = DgvEntradaesaida.Rows(0).Cells(1).Value <> String.Empty And E2 = DgvEntradaesaida.Rows(0).Cells(2).Value <> String.Empty And S2 = DgvEntradaesaida.Rows(0).Cells(3).Value <> String.Empty
	 '	 CbxEmanha.Checked = True
	 '	 CbxSmanha.Checked = True
	 '	 CbxEtarde.Checked = True
	 '	 CbxStarde.Checked = True
	 ' Case E1 = DgvEntradaesaida.Rows(0).Cells(0).Value = True And S1 = DgvEntradaesaida.Rows(0).Cells(1).Value = True And E2 = DgvEntradaesaida.Rows(0).Cells(2).Value = True
	 '	 CbxEmanha.Checked = True
	 '	 CbxSmanha.Checked = True
	 '	 CbxEtarde.Checked = True
	 ' Case E1 = DgvEntradaesaida.Rows(0).Cells(0).Value = True And S1 = DgvEntradaesaida.Rows(0).Cells(1).Value = True
	 '	 CbxEmanha.Checked = True
	 '	 CbxSmanha.Checked = True
	 ' Case E1 = DgvEntradaesaida.Rows(0).Cells(0).Value = True
	 '	 CbxEmanha.Checked = True
	 'End Select
	 'For Each row As DataGridViewRow In DgvEntradaesaida.Rows
	 ' Dim preenchercbx As Integer
	 ' Select Case preenchercbx
	 '	 Case E1 = DgvEntradaesaida.Rows(0).Cells(0).Value <> String.Empty And S1 = DgvEntradaesaida.Rows(0).Cells(1).Value <> String.Empty And E2 = DgvEntradaesaida.Rows(0).Cells(2).Value <> String.Empty And S2 = DgvEntradaesaida.Rows(0).Cells(3).Value <> String.Empty
	 '		 CbxEmanha.Checked = True
	 '		 CbxSmanha.Checked = True
	 '		 CbxEtarde.Checked = True
	 '		 CbxStarde.Checked = True
	 '	 Case E1 = DgvEntradaesaida.Rows(0).Cells(0).Value <> String.Empty And S1 = DgvEntradaesaida.Rows(0).Cells(1).Value <> String.Empty And E2 = DgvEntradaesaida.Rows(0).Cells(2).Value <> String.Empty
	 '		 CbxEmanha.Checked = True
	 '		 CbxSmanha.Checked = True
	 '		 CbxEtarde.Checked = True
	 '	 Case E1 = DgvEntradaesaida.Rows(0).Cells(0).Value <> String.Empty And S1 = DgvEntradaesaida.Rows(0).Cells(1).Value <> String.Empty
	 '		 CbxEmanha.Checked = True
	 '		 CbxSmanha.Checked = True
	 '	 Case E1 = DgvEntradaesaida.Rows(0).Cells(0).Value <> String.Empty
	 '		 CbxEmanha.Checked = True
	 ' End Select
	 'Next row
	 'MsgBox(DgvEntradaesaida.Rows(0).Cells(0).Value & DgvEntradaesaida.Rows(0).Cells(1).Value & DgvEntradaesaida.Rows(0).Cells(2).Value & DgvEntradaesaida.Rows(0).Cells(3).Value)
 End If

End Sub

Espero me ter explicado bem :)

Obrigado desde ja ;)

PS: obviamente coloquei todas as tentativas pois apesar de querer usar a melhor, gostava de perceber porque das outras nao funcionarem :)

Share this post


Link to post
Share on other sites
electric

lol e eu a pensar que tinha feito tudo direitinho lol

muito basicamente

recebo 4 campos numa datagrid view

o que pretendo fazer é ver se o campo esta preenchido se sim avança para o proximo se nao escreve nese campo ...

Share this post


Link to post
Share on other sites
bioshock

Avança para o próximo campo? Estás-te a referir a avançar para a próxima célula?

Dim i As Integer = 0
For Each row As DataGridViewRow In DgvEntradaesaida.Rows
	   If DgvEntradaesaida.Rows(row.Index).Cells(i).Value == String.Empty Then
			' Escreve algo..
	   End If
	   i += 1
Next

Share this post


Link to post
Share on other sites
electric

coloquei assim

Dim i As Integer = 0
	    For Each row As DataGridViewRow In DgvEntradaesaida.Rows
		    If DgvEntradaesaida.Rows(0).Cells(i).Value = String.Empty Then
			    MsgBox("vazio no campo " & i)
		    End If
		    i += 1
	    Next

pela logica ele devia me apresenta a msgbox ao encontrar um dos campos vazios né ? mas nao o esta a fazer ;\

Share this post


Link to post
Share on other sites
bioshock

Isso está mal.

Se só tens uma linha, tens de percorrer as colunas.

For i As Integer = 0 To DgvEntradaesaida.Columns.Count - 1
   If DgvEntradaesaida.Rows(0).Cells(i).Value.ToString() = String.Empty Then
	    ' Faz algo..
   End If
Next

Se quiseres ver o que é que as células contêm, mandas uma MsgBox dá célula dentro do ciclo.

Edited by bioshock

Share this post


Link to post
Share on other sites
electric

Isso :D assim ja funca :)

Agora tou a tentar é marcar as checkbox consoante os campos....

tipo se a celula 1 esta preenchida a cbx1 fica checada e por ai fora

vou ver se consigo achar algo :) alguma dica ? :)

Share this post


Link to post
Share on other sites
electric

:D resolvi assim:

Sub preenchervariaveis()
    'VARIAVEIS

    Dim E1 As String = ""
    Dim S1 As String = ""
    Dim E2 As String = ""
    Dim S2 As String = ""

    CbxEmanha.Checked = False
    CbxSmanha.Checked = False
    CbxEtarde.Checked = False
    CbxStarde.Checked = False


    If DgvEntradaesaida.CurrentCell Is Nothing Then
	    MsgBox("Tecnico ainda nao fez a picagem!")
    Else

	    For i As Integer = 0 To DgvEntradaesaida.Columns.Count - 1
		    If DgvEntradaesaida.Rows(0).Cells(i).Value.ToString() = String.Empty Then
			    MsgBox("vazio no campo " & i)


		    Else
			    'Dim preenchercbx As Integer
			    Select Case i
				    Case 0 'DgvEntradaesaida.Rows(0).Cells(0).Value = True
					    CbxEmanha.Checked = False
					    CbxSmanha.Checked = False
					    CbxEtarde.Checked = False
					    CbxStarde.Checked = False
				    Case 1 'DgvEntradaesaida.Rows(0).Cells(1).Value = True
					    CbxEmanha.Checked = True
					    CbxSmanha.Checked = True
					    CbxEtarde.Checked = False
					    CbxStarde.Checked = False
				    Case 2 'DgvEntradaesaida.Rows(0).Cells(2).Value = True
					    CbxEmanha.Checked = True
					    CbxSmanha.Checked = True
					    CbxEtarde.Checked = True
					    CbxStarde.Checked = False
				    Case 3 'DgvEntradaesaida.Rows(0).Cells(3).Value = True
					    CbxEmanha.Checked = True
					    CbxSmanha.Checked = True
					    CbxEtarde.Checked = True
					    CbxStarde.Checked = True
			    End Select
		    End If
	    Next

    End If

Aprovas ou achas que ha maneira de fazer mais simples de forma ao codigo ficar mais leve ?

Share this post


Link to post
Share on other sites
bioshock

Yep, era isso que estava a sugerir. Tendo em conta que não há uniformidade nas Checkboxes (ou seja, tanto podem haver 3 verdadeiras e 1 falsa, como o contrário) não penso que haja melhor forma.

Share this post


Link to post
Share on other sites
electric

sim a unica sequencia que podemos tirar é que a anterior tem de estar checkada para checkar a proxima :)

Muito obrigado BIO es 1 rei ;)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.