Navegar pelos registros

.NET

22/12/2014

Preciso fazer três ajustes neste form, mas não estou conseguindo...agradeço se alguém puder ajudar :
*Windows form e BD Access.

- O campo hora que carrega pelo botão adicionar do bindingnavigator com o código abaixo :
Depois de salvar fica a data mais a hora, mas tem de ser somente a hora, o que deve estar errado ?
No banco está correto, somente a hora.

horaTextBox.Text = DateTime.Now.ToShortTimeString();


- Quando se clica no botão adicionar será adicionado nova locação, é necessário limpar o grid para que se possa incluir novos itens, como fazer isto ?
Fiz com o código abaixo, mas apaga do banco também...

while (itemLocacaoDataGridView.Rows.Count > 0)
{
itemLocacaoDataGridView.Rows.Remove(itemLocacaoDataGridView.CurrentRow);
}


-E por último, quando se clicar nas setas do bindingnavigator para navegar pelos registros, que mude também os itens no grid.
Estando na locação 1 mostrar os livros da locação 1, quando mudar para locação 2, mostrar os livros da locação 2 e assim por diante.


[img]http://arquivo.devmedia.com.br/forum/imagem/343353-20141222-162231.png[/img]
Jair Souza

Jair Souza

Curtidas 0

Respostas

Joel Rodrigues

Joel Rodrigues

22/12/2014

Vamos lá.
Questão 1:
Como está o tipo de dados no banco?
Tem algum código extra no botão de salvar?
Questão 2:
Tente isso:
itemLocacaoDataGridView.DataSource = null;

Questão 3:
No evento CurrentChanged do BindingSource das locações, você precisa preencher o grid dos itens de acordo com o registro atual.
GOSTEI 0
Jair Souza

Jair Souza

22/12/2014

Questão 1 :
[img]http://arquivo.devmedia.com.br/forum/imagem/343353-20141224-075142.png[/img]

Questão 2 : Funcionou assim :

 bDBibliotecaDataSet.ItemLocacao.Clear();


Questão 3 :
Não sei como fazer, podes detalhar ?
GOSTEI 0
Jair Souza

Jair Souza

22/12/2014

Olá, tens mais alguma dica ?
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

22/12/2014

Sobre a questão 3, trate o evento CurrentChanged do binding source da locação, como eu falei, vai ser algo mais ou menos assim
if(locacaoBindingSource.Current != null)
{
   DataRowView row = locacaoBindingSource.Current as DataRowView;
   itemLocacaoTableAdapter.Fill(dataSet.itemLocacaoTable, row["CodLocacao"].ToString())
}


Obviamente não é pra copiar este código, mas sim pegar a ideia.
GOSTEI 0
Jair Souza

Jair Souza

22/12/2014

Tentei ajustar, mas não estou conseguindo acertar....

[img]http://arquivo.devmedia.com.br/forum/imagem/343353-20150102-172923.png[/img]
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

22/12/2014

Dessa forma que está aí eu não consegui identificar qual é o erro exatamente. Aparentemente esse método FillByLocacoesPendentes não existe, tem certeza que é esse Fill que você usa?
GOSTEI 0
Jair Souza

Jair Souza

22/12/2014

Este método é válido e é usado em outra parte do código.
Veja abaixo como está agora...:

[img]http://arquivo.devmedia.com.br/forum/imagem/343353-20150105-210130.png[/img]
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

22/12/2014

E qual foi o problema ao utilizá-lo?
Nesta imagem aí o erro é que não tem esse ponto, como mostrei no exemplo: row["IDLocacao"].ToString().
GOSTEI 0
Jair Souza

Jair Souza

22/12/2014

Então...sem o ponto que realmente não faz sentido, dá o erro da imagem anterior, já tentei vários ajustes, mas nada funciona...
GOSTEI 0
Jair Souza

Jair Souza

22/12/2014

Deixei o fill nativo, Agora está dando este erro, mas não sei o que significa...

[img]http://arquivo.devmedia.com.br/forum/imagem/343353-20150107-213959.png[/img]
GOSTEI 0
Jair Souza

Jair Souza

22/12/2014

Bom dia, pessoal, alguma dica para este aprendiz ?
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

22/12/2014

Você testou apenas corrigir o erro que falei e usar o FillByLocacoesPendentes?
O erro aí é bastante claro: não existe um método Fill que receba 2 argumentos.
GOSTEI 0
Jair Souza

Jair Souza

22/12/2014

Corrigi o erro que falaste Retirando o ponto e voltei ao FillByLocacoesPendentes e dá este erro :


[img]http://arquivo.devmedia.com.br/forum/imagem/343353-20150112-110725.png[/img]
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

22/12/2014

Aí diz que o método não existe.
Você consegue pelo menos identificar quais métodos existem, e quais argumentos eles esperam?
GOSTEI 0
Jair Souza

Jair Souza

22/12/2014

Este existe e está funcionando na querybuilder :

[img]http://arquivo.devmedia.com.br/forum/imagem/343353-20150113-122417.png[/img]

E também aparece nas opções no código :

[img]http://arquivo.devmedia.com.br/forum/imagem/343353-20150113-122502.png[/img]
GOSTEI 0
Jair Souza

Jair Souza

22/12/2014

Pessoal, já excedi meu conhecimento....rrrrs, se alguém puder ajudar, agradeço muito.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

22/12/2014

Cara, seu problema é com a compreensão desses métodos Fill. Você vai precisar dar uma pesquisada pra entender como eles funcionam e como passar parâmetros para um método, pois vejo que você está com dificuldade de entender os argumentos esperados pelo método.

Por exemplo, esse FillByLocacoesPendentes não recebe nenhum filtro, ele recebe apenas a tabela que vai ser preenchida. Você vai precisar, neste caso, de um Fill que receba, além da tabela, o ID/Código da locação, para retornar os itens dela. Algo do tipo: FillByLocacao(dataTable, 10); que preencheria os itens da locação 10.
GOSTEI 0
Jair Souza

Jair Souza

22/12/2014

Finalmente consegui ficou assim :

Criei uma query FillIBytensLocados :

SELECT        ItemLocacao.IDItem, ItemLocacao.IDLocacao, ItemLocacao.IDLivro, ItemLocacao.IDLocatario, ItemLocacao.IDFuncionario, ItemLocacao.[Data de Devolucao], 
                         ItemLocacao.Obs1, ItemLocacao.Obs2, ItemLocacao.Obs3

FROM            ((ItemLocacao INNER JOIN Locacao ON Locacao.IDLocacao = ItemLocacao.IDLocacao) 
                         INNER JOIN Locatario ON Locatario.IDLocatario = Locacao.IDLocatario)

WHERE        (Locatario.IDLocatario = ?) AND (ItemLocacao.[Data de Devolucao] IS NULL)


E chamo nos clicks dos botões de navegação do form :

private void BtnPrimeiro_Click(object sender, EventArgs e)
        {
            this.itemLocacaoTableAdapter.FillByIDLocatario(this.bDBibliotecaDataSet.ItemLocacao,Convert.ToInt32(iDLocatarioTextBox.Text));
        }


Aqui está buscando pelo ID do Locatário, em outro form coloquei para chamar pelo ID da locação :

SELECT        ItemLocacao.IDItem, ItemLocacao.IDLocacao, ItemLocacao.IDLivro, ItemLocacao.IDLocatario, ItemLocacao.IDFuncionario, ItemLocacao.[Data de Devolucao], 
                         ItemLocacao.Obs1, ItemLocacao.Obs2, ItemLocacao.Obs3
FROM            ((ItemLocacao INNER JOIN
                         Locacao ON Locacao.IDLocacao = ItemLocacao.IDLocacao) INNER JOIN
                         Locatario ON Locatario.IDLocatario = Locacao.IDLocatario)
WHERE        (Locacao.IDLocacao = ?) AND (ItemLocacao.[Data de Devolucao] IS NULL)


Valeu !
GOSTEI 0
POSTAR