Usuário com melhor resposta
Pegar o nome do campo ou (coluna) de uma tabela

Pergunta
-
using (DataLinqDataContext db = new DataLinqDataContext())
cad_Fornecedore newReg = new Cad_Fornecedore();
newReg["NomedoCampo"] = tx_RazaoSocial.Text;
dbo.Cad_Fornecedores.InsertOnSubmit(newReg);
dbo.SubmitChanges()
a dificuldade esta em como fazer isso
NewReg[lb_NomedoCampo.Text] = tx_RazaoSocial.Text; // onde não sei que nome do campo sera informado ai ele vira por exemplo textbox, combo ou como ai acima label
desde ja agradeço
Respostas
-
Esse codigo ficou meio macarronico. tenta assim:
var nomeCampo = label1.Text; var campo = newReg.GetType().GetProperty(nomeCampo); if (campo != null) campo.SetValue(newReg, campo, null); db.Cad_Fornecedores.InsertOnSubmit(newReg); db.SubmitChanges();
Gustavo Rocha, MCTS, MCPD, CSM, Arquiteto de Software - http://subindoaladeira.wordpress.com/- Sugerido como Resposta AndreAlvesLimaModerator terça-feira, 2 de março de 2010 11:47
- Marcado como Resposta AndreAlvesLimaModerator sábado, 12 de junho de 2010 00:59
Todas as Respostas
-
Prezado,
Não entendi sua dúvida... O que você não está conseguindo fazer?
André Alves de Lima
Visite o meu site: http://andrealveslima.spaces.live.com
Me siga no Twitter: @andrealveslima -
Ai And blzz?
É o seguinte o natural é NewReg.NomeCampo = text1.text; //OK?
Fazemos isso quando o nome do campo é conhecido mas vamos dizer que eu tenha um parametro no meu sistema que cada cliente usa um form diferente e que usa os mesmos campos da tabela assim eu tereia uns 5 forms que usam a mesma tabela q populam campos diferentes para que eu não precise testar quem esta usando e fazer um tratamento padrão pego o nome do campo na propriedade Text de um Label mas poderia ser na Tag ou de uma variavel enfim no projeto em Visual Basic 6.0 (Seis) eu faço assim:
Neste caso para recuperar dados
Set TabClone = New ADODB.Recordset
Set TabClone.ActiveConnection = Banco
TabClone.CursorType = adOpenStatic
TabClone.LockType = adLockOptimistic
TabClone.Open sSQL
Text2.Text = TabClone(Text1.Text)'Onde o nome do campo esta em Text1.Text
Para fazer o insert
sSQL = "Insert Into Tabela(" & Label1.Caption & "," & Label2.Caption & ") Value ('" & Text1.Text & "',' " & Text2.Text & "')"
Veja que os nome do campo esta no Caption dos Label's isso é possivel em VB6 sera que conseguiriamos fazer o mesmo em C#?
Eu acredito ser possivel mas parece ser dificil.
abs -
Clodoaldo, eu te respondi isso na outra thread.De que tipo é seu cad_Fornecedore ?Vc so vai acessar a propriedade do seu tipo por lista e por conseguinte pelo nome do campo variavel, se sua classe dispor e implementar isso.Se nao, voce vai ter que fazer por reflection.Responda primeiro de que tipo é esse seu objeto. Assim podemos ver como acessar as suas colunas de maneira variavel.Abs
Gustavo Rocha, MCTS, MCPD, CSM, Arquiteto de Software - http://subindoaladeira.wordpress.com/ -
Pois é na outra fiz a perggunta de maneira errada acho q nao estou conseguindo me expressar corretamente
using (DataLinqDataContext db = new DataLinqDataContext())
cad_Fornecedore newReg = new Cad_Fornecedore();// Aqui vem do Linq eu puxei uma tabela do sql server DataLinqDataContext
newReg["NomedoCampo"] = tx_RazaoSocial.Text;
dbo.Cad_Fornecedores.InsertOnSubmit(newReg);
dbo.SubmitChanges()
a dificuldade esta em como fazer isso
NewReg[lb_NomedoCampo.Text] = tx_RazaoSocial.Text; // onde não sei que nome do campo sera informado ai ele vira por exemplo textbox, combo ou como ai acima label
Veja se eu consegui me expressar melhor ?
cad_Fornecedore newReg = new Cad_Fornecedore();// Aqui vem do Linq eu puxei uma tabela do sql server DataLinqDataContext -
Eu entendi sua intencao, mas ainda nao sei que tipo é seu cad_Fornecedore.Voce disse que puxou uma tabela do datacontext, mas veja na heranca que tipo de objeto é esse. Eu nao entendo bem o que vc diz quando fala que puxou do datacontext, mas importante pra mim é saber qual a heranca desse objeto.Assim poso te falar se da ou nao pra fazer direto ou se vc faz por reflection
Gustavo Rocha, MCTS, MCPD, CSM, Arquiteto de Software - http://subindoaladeira.wordpress.com/ -
Gustavo,
Pelo jeito, ele está utilizando LINQ to Sql Classes... Não sei se daria pra utilizar reflection pra acessar dinamicamente a propriedade... Eu nunca tentei...
De qualquer forma, Clodoaldo, dê uma olhada neste link e veja se te ajuda:
http://articles.techrepublic.com.com/5100-10878_11-6099345.html
André Alves de Lima
Visite o meu site: http://andrealveslima.spaces.live.com
Me siga no Twitter: @andrealveslima -
Ai vc me deu uma luz valeu: mas to pecando em alguma coisa ...
using (DataLinqDataContext db = new DataLinqDataContext())
{
Cad_Fornecedore newReg = new Cad_Fornecedore();
string sCampo;
var getCampo = Label1.GetType().GetProperty("Text");
sCampo = getCampo.GetValue(Label1, null).ToString();
Type myType = newReg.GetType();
var oCampo = myType.GetField(sCampo);
oCampo.SetValue(newReg, "teee");
db.Cad_Fornecedores.InsertOnSubmit(newReg);
db.SubmitChanges();}
oCampo.SetValue(newReg, "teee");// no "teee" ai na verdade vai ser de TextBox1.Text
System.NullReferenceException was unhandled
Message="Object reference not set to an instance of an object."
Obrigado por enquanto -
Andre,por reflection obrigatoriamente ele vai conseguir, mas nao é performaticamente o melhor. O ideal é acessar por enumerador.
Gustavo Rocha, MCTS, MCPD, CSM, Arquiteto de Software - http://subindoaladeira.wordpress.com/- Sugerido como Resposta AndreAlvesLimaModerator terça-feira, 2 de março de 2010 11:47
- Não Sugerido como Resposta AndreAlvesLimaModerator terça-feira, 2 de março de 2010 11:47
-
Esse codigo ficou meio macarronico. tenta assim:
var nomeCampo = label1.Text; var campo = newReg.GetType().GetProperty(nomeCampo); if (campo != null) campo.SetValue(newReg, campo, null); db.Cad_Fornecedores.InsertOnSubmit(newReg); db.SubmitChanges();
Gustavo Rocha, MCTS, MCPD, CSM, Arquiteto de Software - http://subindoaladeira.wordpress.com/- Sugerido como Resposta AndreAlvesLimaModerator terça-feira, 2 de março de 2010 11:47
- Marcado como Resposta AndreAlvesLimaModerator sábado, 12 de junho de 2010 00:59
-
-
-
-
Clodoaldo,
Alguma novidade?
André Alves de Lima
Visite o meu site: http://andrealveslima.spaces.live.com
Me siga no Twitter: @andrealveslima -
Daê Piá!!!!!!!!!!
é o seguinte hj finalmente consegui mas esbarrei em outro problema
Segue ai como q fica
var providerField = typeof(Cad_Fornecedore).GetProperty(sCampo);
providerField.SetValue(newReg, sValor, null);
Mas no meu caso naum sei qual o nome da tabela tentei o mesmo mas nao fumego
Cad_Fornecedore NomeTabela = new Cad_Fornecedore ();
var getTabela = typeof(NomeTabela).GetProperty("CadFornecedor");
Retorna esse erro:
The type or namespace name 'NomeTabela' could not be found (are you missing a using directive or an assembly reference?
Tem alguma ideia???
Obrigado por retornar... -
Clodoaldo, voce precisa nos ajudar a te ajudar. Tem que explicar melhor.Primeiro voce queria pegar o valor de um campo em uma tabela sendo que o nome desse campo voce so saberia em runtime. Blz?Afinal, essa parte funcionou?Agora vc quer pegar o nome da tabela. É isso mesmo? Nao ta dando pra entender, cara.Cad_Fornecedore NomeTabela = new Cad_Fornecedore ();
var getTabela = typeof(NomeTabela).GetProperty("CadFornecedor");qual a finalidade desse codigo? nao tem como vc dar um typeof(NomeTabela). Nome tabela é uma variavel, nao é um tipo.
Gustavo Rocha, MCTS, MCPD, CSM, Arquiteto de Software - http://subindoaladeira.wordpress.com/ -
Clodoaldo,
Como o Gustavo falou, tem como você detalhar melhor o que você está querendo?
André Alves de Lima
Visite o meu site: http://andrealveslima.spaces.live.com
Me siga no Twitter: @andrealveslima