ERRO NA GRID

COQUITO 01/07/2022 09:11:13
#500143
Olá Pessoal tudo bem?
estou passando uma dificuldade de tentar resolver este problema
quando tento organizar o campo pelo datagrid numa determinada coluna aparece o erro
  System.ArgumentException: "Object must be of type String."  


Isso somente aparece quando uma célula está fazia, quando não está vazia organiza normal, o problema não da para colocar um breakpoint e identificar, porque não está na leitura dos dados.
alguma ideia que pode ajudar a resolver?

Citação:

using (DataTable Dt_Lista = N_Funcionarios.LerTodosFuncionarios(size))
{
DgvDados.Rows.Clear();
// DgvDados.Columns.Clear();


if (DgvDados.Columns.Count == 0)
{

foreach (DataColumn Col in Dt_Lista.Columns)
{

DgvDados.Columns.Add(Col.ColumnName, Col.ColumnName);

if (BolPararLoopLeituraFunc == true)
{
break;
}
}



}

FormatarDatagrid();

if (Dt_Lista.Rows.Count > 0)
{
foreach (DataRow row in Dt_Lista.Rows)
{
DgvDados.Rows.Add(row.ItemArray);

MostrarMensagemLabel();

if (BolPararLoopLeituraFunc == true)
{
break;
}
}
}

MostrarMensagemLabel();

}

COQUITO 02/07/2022 16:50:47
#500150
olá pessoal

alguém que possa dar uma ideia para poder resolver ?
JABA 02/07/2022 20:46:00
#500151
O que voce quer dizer por "organizar campo"?

Em vez de usar o foreach, teste com o for (int i=0; i<Dt_Lista.Rows.Count; i++) e veja se corrige o seu problema.
COQUITO 03/07/2022 08:30:02
#500152
Citação:

:
O que voce quer dizer por "organizar campo"?

Em vez de usar o foreach, teste com o for (int i=0; i<Dt_Lista.Rows.Count; i++) e veja se corrige o seu problema.



Jaba,
estou chamando a ele em forma Ascending, nessa coluna
mas o problema não é os dados, o problema aparece quando faço um click no titulo da coluna se essa cells está vazia ele dispara esse erro
System.ArgumentException: "Object must be of type String."  

fora disso ele traz todos os dados normal
não consigo debug porque o erro não é de dados.
JABA 03/07/2022 15:41:14
#500153
Esse erro deve estar ocorrendo na ordenação porque voce deve estar inserindo tipos de dados diferentes para algumas colunas desse DataGrid. Por exemplo, se o primeiro registro da coluna é String, o restante será tratado como String automaticamente. Desta forma, se os tipos de dados dos próximos registros dessa coluna mudar, vai gerar essa exceção. E é exatamente isso que acontece contigo! Veja que na coluna do CPF o primeiro registro está vazio e o restante é preenchido com números. Bingo!!! O grid estava esperando outras Strings na sequencia, só que o seu tipo de dados mudou, daí é disparada uma exceção. Basta, então, só colocar um zero nessa coluna com dado vazio que o problema será corrigido. Após essa correção, veja se o mesmo acontece nas outras colunas.
DS2T 04/07/2022 15:39:36
#500160
Resposta escolhida
Acredito que o motivo é que voce está passando os valores do RowData diretamente para o seu grid.
O ADO.NET não trata valores nulos no banco como null, ele é convertido para DBNull. Então no meio das suas strings tem alguns DBNull. O que voce deve fazer é fazer o tratamento desses caras e passar para um null ou um string.Empty.

Att,
COQUITO 05/07/2022 15:35:58
#500164
Citação:

:
Esse erro deve estar ocorrendo na ordenação porque voce deve estar inserindo tipos de dados diferentes para algumas colunas desse DataGrid. Por exemplo, se o primeiro registro da coluna é String, o restante será tratado como String automaticamente. Desta forma, se os tipos de dados dos próximos registros dessa coluna mudar, vai gerar essa exceção. E é exatamente isso que acontece contigo! Veja que na coluna do CPF o primeiro registro está vazio e o restante é preenchido com números. Bingo!!! O grid estava esperando outras Strings na sequencia, só que o seu tipo de dados mudou, daí é disparada uma exceção. Basta, então, só colocar um zero nessa coluna com dado vazio que o problema será corrigido. Após essa correção, veja se o mesmo acontece nas outras colunas.



Meu grande, o problema persiste
COQUITO 05/07/2022 15:38:25
#500165
Citação:

:
Acredito que o motivo é que voce está passando os valores do RowData diretamente para o seu grid.
O ADO.NET não trata valores nulos no banco como null, ele é convertido para DBNull. Então no meio das suas strings tem alguns DBNull. O que voce deve fazer é fazer o tratamento desses caras e passar para um null ou um string.Empty.

Att,



deu certo, converti em string e não está mais apresentando esse erro, eu pensei que ele convertia diretamente em string porque ao final estava declarando que estpero um string,
agora deu certo.
Tópico encerrado , respostas não são mais permitidas