J'ai besoin d'obtenir l'objet actuellement sélectionné à partir de la base de données DataGridView.
Je n'ai pas besoin de l'objet de la cellule sélectionnée actuelle, mais de l'objet sur lequel la ligne entière est basée, dans ce cas un BusinessObject dont les propriétés font les colonnes de la grille.
Je pourrais passer en revue le DataSource, mais cela en soi n'est qu'un objet et peut être un BindingSource ou un IBindingList ou quelque chose comme ça - donc pas un moyen standardisé facile d'obtenir l'objet voulu.
Derrière cela se trouve la nécessité de simplement vérifier le businessObject pour une propriété appelée IsChanged et demander à l'utilisateur d'enregistrer ou d'annuler les modifications, avant que la source de liaison sélectionne l'élément suivant. Par conséquent, je dois trouver l'objet actuel dans RowValidating-Event du DataGridView, car le BindingSource n'offre pas d'événement à arrêter de changer avant que le changement ne se produise . Voir ici pour le problème bien conn
Merci d'avoir lu ;-)
DataGridViewRow.DataBoundItem
contient l'objet 'métier' auquel il est lié.
Voici mon code mettre ceci dans votre classe Person
public static explicit operator Person(DataRow dr)
{
Person p = new Person();
p.adi = dr.ItemArray[0].ToString();
p.id = Int32.Parse(dr.ItemArray[1].ToString());
p.soyadi = dr.ItemArray[2].ToString();
p.kartNo = dr.ItemArray[3].ToString();
p.dogumTarihi = DateTime.Parse( dr.ItemArray[4].ToString() );
p.adres = dr.ItemArray[5].ToString();
p.meslek = dr.ItemArray[6].ToString();
p.telefon = dr.ItemArray[7].ToString();
p.gsm = dr.ItemArray[8].ToString();
p.eposta = dr.ItemArray[9].ToString();
return p;
}
et ceci est un clic sur le bouton de mise à jour
DataRow row = (dataGridView1.SelectedRows[0].DataBoundItem as DataRowView).Row;
Person selected = (Person)row;
Vous pouvez obtenir la valeur de cellule sélectionnée comme ceci
yourDGV.CurrentCell.Value;
Si vous voulez la valeur sous la forme d'une chaîne, utilisez simplement la méthode ToString () comme celle-ci
yourDGV.CurrentCell.Value.ToString();
Cela devrait le faire
Étant donné que vous avez déclaré l'IBindingList - oui, comme d'autres l'ont dit, la propriété DataBoundItem vous donnera ce dont vous avez besoin - il y a un problème avec celui-ci que j'avais rencontré précédemment et qui s'est retrouvé avec une référence nulle mais pour l'instant je ne peux pas penser au scénario dans lequel cela s'est produit.
Si vous êtes lié aux données à l'aide d'un BindingSource - vous pouvez capturer les événements CurrentChanged, CurrentItemChanged de votre BindingSource, vous n'avez pas besoin d'avoir une propriété IsChanged supplémentaire sur votre B.O. .., la source de données sous-jacente peut également indiquer une modification - par exemple, si vous avez BindingSource lié à une table de données, la ligne vous donnera un indicateur modifié.
Et de cette façon?
foreach (DataGridViewRow item in this.dataGridView1.SelectedRows)
{
MessageBox.Show(item.Cells[0].Value.ToString());
}
Nous pouvons obtenir plusieurs données de lignes sélectionnées.