0
DataGridViewセルが同じ値を持つ場合、それらをマージしたい。 2つ以上のチェックボックスをクリックするとすべてが正常に見えます。それは、この絵のようにエラーが表示される: 同じ値のエラーがある場合、DataGridViewセルをマージする
private void grdDNSELECT_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
try
{
e.AdvancedBorderStyle.Bottom = DataGridViewAdvancedCellBorderStyle.None;
if (e.RowIndex < 1 || e.ColumnIndex < 0)
return;
e.AdvancedBorderStyle.Top = IsTheSameCellValue(e.ColumnIndex, e.RowIndex) ? DataGridViewAdvancedCellBorderStyle.None : grdDNSELECT.AdvancedCellBorderStyle.Top;
}
catch (Exception ex)
{
//throw ex;
}
}
private void grdDNSELECT_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
try
{
if (e.RowIndex == 0)
return;
if (IsTheSameCellValue(e.ColumnIndex, e.RowIndex))
{
e.Value = "";
e.FormattingApplied = true;
}
}
finally
{
//
}
}
をあなたは、このエラーがスローされたラインで言うことはありません。私は、 'e.Value =" ";'という行から推測しています。 IsTheSameCellValue(e.ColumnIndex、e.RowIndex)が何をしているのかは不明ですが、列の1つが数値型の場合、 'e.Value =" ";はこの代入でデータエラーをスローします。この行は 'CellFormatting'イベントにあるので、' IsTheSameCellValue(e.ColumnIndex、e.RowIndex) 'が何を返すのかによって、この値は任意のセルに設定される可能性があります。 – JohnG
bool IsTheSameCellValue(int列、int行) { DataGridViewCell cell1 = grdDNSELECT [列、行]; DataGridViewCell cell2 = grdDNSELECT [列、行-1]。 if(cell1.Value == null || cell2.Value == null) { falseを返します。 } return cell1.Value.ToString()== cell2.Value.ToString(); } – user3035133
追加されたコードを使用して現在の質問を編集する方が良いかもしれません。提供されたコードでも、私は繰り返し述べます。 'e.Value =" ";'行は 'CellFormatting'イベントを終了しようとするとこのエラーを投げます。例えば、IsTheSameCellValue(e.ColumnIndex、e.RowIndex)がtrueを返し、 'e.ColumnIndex == 0'を返した場合、データグリッドビューのチェックを設定できないため、この' DataError'を取得します。ボックスセルの値を「」に設定します。前に述べたように、同じことが数値列や日付にも当てはまります。 – JohnG