J'ai un DataGridView
où je mets DataSource
:
taskerEntities te = new taskerEntities();
var OMsMasterDescriptiveIndicators = te.MyTable.Select(x => new lccls {Id = x.Id, name = x.name }).ToList();
MyGrid.DataSource = OMsMasterDescriptiveIndicators;
avec moi class lccls
as
public class lccls
{
public string Id { get; set; }
public Nullable<decimal> name { get; set; }
}
À un certain événement, je veux rendre la ligne actuelle invisible:
MyGrid.Rows[5].Visible = false;
Mais je ne peux pas faire ça. Au lieu de cela, une exception est levée avec le message d'erreur suivant:
La ligne associée à la position du gestionnaire de devises ne peut pas être rendue invisible
Je soupçonne que la raison est liée à la configuration de DataSource
, mais pourquoi?
Après avoir beaucoup cherché, j'ai obtenu la solution
CurrencyManager currencyManager1 = (CurrencyManager)BindingContext[MyGrid.DataSource];
currencyManager1.SuspendBinding();
MyGrid.Rows[5].Visible = false;
currencyManager1.ResumeBinding();
Impossible de définir la propriété visible de votre ligne DataGridView sur false lorsque l'index de ligne actuel rencontrera une telle erreur si vous essayez de masquer la cellule actuelle
soulution:
lorsque votre source de données DataDataGridView n'est pas nulle:
CurrencyManager currencyManager1 = (CurrencyManager)BindingContext[yourDataGridView.DataSource];
currencyManager1.SuspendBinding();
yourDataGridView.Rows[Target Index].Visible = false;
currencyManager1.ResumeBinding();
lorsque votre source de données DataDataGridView est nulle:
yourDataGridView.CurrentCell = null;
yourDataGridView.Rows[Target Index].Visible = false;
J'ai un exemple pour U. J'ai un datagridview qui peut multisélectionner la ligne. Lorsque je clique sur le bouton pour afficher la fausse ligne visible sélectionnée. Essaye ça:
foreach (DataGridViewRow row in dataGridView1.SelectedRows)
{
CurrencyManager currencyManager1 =(CurrencyManager)BindingContext[dataGridView1.DataSource];
currencyManager1.SuspendBinding();
dataGridView1.CurrentCell = null;
row.Visible = false;
}
dataGridView1.Refresh();
N'oubliez pas de définir la propriété SelectionMode: FullRowSelect
Exemple
foreach (DataGridViewRow rw in dataGridView1.Rows)
{
if (rw.Cells[14].Value.ToString() == "") // this Cell have a TEXT,
{
CurrencyManager currencyManager1 = (CurrencyManager)BindingContext[dataGridView1.DataSource];
currencyManager1.SuspendBinding();
rw.Visible = false;
currencyManager1.ResumeBinding();
}
}
cela affiche uniquement la ligne qui a dans l'index de cellule 14, si elle est vide ou vide la ligne entière ne s'affiche pas
Peut-être un peu tard pour répondre à cette rubrique, mais je vous suggère d'utiliser la propriété DataTable.DefaultView.RowFilter pour filtrer ce que vous devez afficher sur le DataGridView délimité. Veuillez consulter le lien suivant pour plus d'informations: https://docs.Microsoft.com/en-us/dotnet/api/system.data.dataview.rowfilter?redirectedfrom=MSDN&view=netframework-4.8#System_Data_DataView_RowFilter =
cordialement.