web-dev-qa-db-ja.com

データグリッドビューの行をfalseに表示するように設定できません

DataGridViewを設定しました。ここでDataSourceを設定します。

taskerEntities te = new taskerEntities();
var OMsMasterDescriptiveIndicators = te.MyTable.Select(x => new lccls {Id = x.Id, name = x.name }).ToList();
MyGrid.DataSource = OMsMasterDescriptiveIndicators;

私のclass lccls なので

public class lccls
    {
        public string Id { get; set; }
        public Nullable<decimal> name { get; set; }
    }

特定のイベントで現在の行を非表示にしたい:

 MyGrid.Rows[5].Visible = false;

しかし、私はこれを行うことができません。代わりに、次のエラーメッセージで例外がスローされます。

通貨マネージャーのポジションに関連付けられた行は非表示にできません

理由はDataSourceの設定に関連していると思いますが、なぜですか?

24
Amit Bisht

多くを検索した後、私は solution を得ました

CurrencyManager currencyManager1 = (CurrencyManager)BindingContext[MyGrid.DataSource];  
currencyManager1.SuspendBinding();
MyGrid.Rows[5].Visible = false;
currencyManager1.ResumeBinding();
49
Amit Bisht

現在の行インデックスが現在のセルを非表示にしようとするとそのようなエラーが発生する場合、yourDataGridView行の可視プロパティをfalseに設定できません

ソリューション:

yourDataGridViewデータソースがnullでない場合:

  CurrencyManager currencyManager1 = (CurrencyManager)BindingContext[yourDataGridView.DataSource];
                       currencyManager1.SuspendBinding();
                       yourDataGridView.Rows[Target Index].Visible = false;
                       currencyManager1.ResumeBinding();

yourDataGridViewデータソースがnullの場合:

 yourDataGridView.CurrentCell = null;
 yourDataGridView.Rows[Target Index].Visible = false;
12
Moory Pc

Uの例があります。複数選択された行を持つ可能性のあるdatagridviewがあります。ボタンをクリックすると、選択した偽の行が表示されます。これを試して:

foreach (DataGridViewRow row in dataGridView1.SelectedRows)
        {
            CurrencyManager currencyManager1 =(CurrencyManager)BindingContext[dataGridView1.DataSource];
                currencyManager1.SuspendBinding();
                dataGridView1.CurrentCell = null;
                row.Visible = false;
        }
        dataGridView1.Refresh();

プロパティSelectionModeを設定することを忘れないでください:FullRowSelect

        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();

            }
        }

これは、セルインデックス14にある行のみを表示します。これが空白または空の場合、行全体が表示されません。

1
Cristian UYT

たぶんこのトピックに回答するには少し遅れますが、DataTable.DefaultView.RowFilterプロパティを使用して、制限付きのDataGridViewに表示する必要があるものをフィルタリングすることをお勧めします。詳細については、次のリンクを確認してください: https://docs.Microsoft.com/en-us/dotnet/api/system.data.dataview.rowfilter?redirectedfrom=MSDN&view=netframework-4.8#System_Data_DataView_RowFilter =

よろしく。

0
HassanRezai