[ad_1]
こんにちは、みんな、
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 さん、説明ありがとうございます。
[ad_2]
コメント