【解決方法】Null行を非表示にするにはどうすればよいですか


こんにちは、みんな、
datagridviewにバインドしたSQLデータベースを使用してac# winformアプリケーションを作成しています。必要な列をロードした後、null値を入れた行があり、セル値が入力されるたびにそれらを削除したいと考えています。ロードされた列の 1 つが null です。 誰か助けてくれませんか?
以下のコードはこれまで試したものですが、エラーがあるようです。

私が試したこと:

C#
<pre>private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
        {
            dataGridView2.Columns.OfType<DataGridViewColumn>().ToList().ForEach(col => col.Visible = false);

            dataGridView2.Columns["lotDataGridViewTextBoxColumn"].Visible = true;
            dataGridView2.Columns["ItemDataGridViewTextBoxColumn"].Visible = true;
            dataGridView2.Columns[$"{comboBox1.Text+comboBox2.Text}DataGridViewTextBoxColumn"].Visible = true;
foreach (DataGridViewRow row in dataGridView2.Rows)
            {
                if(dataGridView2.Rows[row.Index].Cells[$"{comboBox1.Text + comboBox2.Text}DataGridViewTextBoxColumn"].Value?.ToString() is null)
                {
                    CurrencyManager currencyManager1 = (CurrencyManager)BindingContext[dataGridView2.DataSource];
                    currencyManager1.SuspendBinding();
                    currencyManager1.ResumeBinding();

                }
            }
            



        }

解決策 1

電話はできません ToString (または他の方法) null 値、およびへの呼び出し ToString (静電気以外は Convert.ToString) メソッドは常に少なくとも空の文字列を返します: への呼び出しが成功しませんでした。 object.ToString null 値を返すことはありません。
したがって、このコードは次のようになります。

if(dataGridView2.Rows[row.Index].Cells[$"{comboBox1.Text + comboBox2.Text}DataGridViewTextBoxColumn"].Value?.ToString() is null)

決して評価しない trueただし、null 参照例外がスローされる場合があります。

Graeme 氏が述べたように、最良の解決策は、DataAdapter / DataSet をロードする SQL クエリを介したデータベース アクセスから null 値の行を除外することです。

解決策 2

コードに少し取り組んだ後、簡単な解決策を見つけました。 データテーブルのデータ ウィンドウに NULL が表示される場合、それは C# の null ではなく、C# の “” に相当します。

したがって、すべての「null」列を削除するには、次のように記述するだけです。

if(dataGridView2.Rows[row.Index].Cells[$"{comboBox1.Text + comboBox2.Text}DataGridViewTextBoxColumn"].Value?.ToString() is null)

Richard さんと OriginalGriff さん、説明ありがとうございます。

コメント

タイトルとURLをコピーしました