web-dev-qa-db-fra.com

Impossible de définir la ligne visible fausse d'une vue de datagrid

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?

24
Amit Bisht

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();
49
Amit Bisht

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;
12
Moory Pc

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

1

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

1
Cristian UYT

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.

0
HassanRezai