Como posso fazer o banco de dados em C#?
-
02-07-2019 - |
Pergunta
Eu tenho a seguinte aula
public class Car { public Name {get; set;} }
E eu quero ligar isso programaticamente a uma caixa de texto.
Como faço isso?
Atirando no escuro:
... Car car = new Car(); TextEdit editBox = new TextEdit(); editBox.DataBinding.Add("Name", car, "Car - Name"); ...
Estou tendo o erro a seguir
"Não é possível vincular ao 'nome' da propriedade no controle de destino.
O que estou fazendo de errado e como devo fazer isso? Estou achando o conceito de banco de dados um pouco difícil de entender vindo do desenvolvimento da Web.
Solução
Você quer
editBox.DataBindings.Add("Text", car, "Name");
O primeiro parâmetro é o nome da propriedade no controle que você deseja ser banco de dados, o segundo é a fonte de dados, o terceiro parâmetro é a propriedade na fonte de dados a que você deseja vincular.
Outras dicas
Sem olhar para a sintaxe, tenho certeza de que é:
editBox.DataBinding.Add("Text", car, "Name");
editBox.DataBinding.Add("Text", car, "Name");
Primeiro Arg é o nome da propriedade Control, o segundo é o objeto a vincular e o último, o nome da propriedade do objeto que você deseja usar como fonte de dados.
Você está próximo, a linha de ligação de dados seria
editBox.DataBinding.Add("Text", car, "Name");
Este primeiro parâmetro é a propriedade do seu objeto EditBox que será vinculado a dados. O segundo parâmetro é a fonte de dados a que você está vinculando e o último parâmetro é a propriedade na fonte de dados a que você deseja vincular.
Lembre -se de que a ligação dos dados é uma maneira; portanto, se você alterar a caixa de edição, o objeto do carro será atualizado, mas se você alterar o nome do carro diretamente, a caixa de edição não será atualizada.
Tentar:
editBox.DataBinding.Add( "Text", car", "Name" );
Acredito que
editbox.databindings.add (New Binding ("Text", Car, "Name"));
deve fazer o truque. Não experimentei, mas acho que essa é a ideia.
Você está tentando vincular ao "nome" do controle de texto. O nome é usado para acessar o controle programaticamente e não pode ser vinculado. Você deve estar vinculado ao texto do controle.
A seguir, é a classe genérica que pode ser usada como propriedade e implementa o inotifyPropertyChanged usado pelos controles ligados para capturar alterações no valor da propriedade.
public class NotifyValue<datatype> : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged = delegate { };
datatype _value;
public datatype Value
{
get
{
return _value;
}
set
{
_value = value;
PropertyChanged.Invoke(this, new PropertyChangedEventArgs("Value"));
}
}
}
Pode ser declarado assim:
public NotifyValue<int> myInteger = new NotifyValue<int>();
e atribuído a uma caixa de texto como esta
Textbox1.DataBindings.Add(
"Text",
this,
"myInteger.Value",
false,
DataSourceUpdateMode.OnPropertyChanged
);
.. Onde "texto" é de propriedade da caixa de texto, 'isso' é a instância atual do formulário.
Uma classe não precisa herdar a classe InotifyPropertyChanged. Depois de declarar um evento do tipo system.componentmodel.propertyChangedEventHandler O evento de mudança de classe será subscrito pelo banco de dados de controles
Usando a sintaxe C# 4.6:
editBox.DataBinding.Add(nameof(editBox.Text), car, nameof(car.Name));
Se o carro for nulo, o código acima falhará de uma maneira mais conspícua do que usar a sequência literal para representar o datamember
do car
Está
this.editBox.DataBindings.Add(new Binding("Text", car, "Name"));