2017-05-03 51 views
0

DataGridViewセルが同じ値を持つ場合、それらをマージしたい。 2つ以上のチェックボックスをクリックするとすべてが正常に見えます。それは、この絵のようにエラーが表示される: enter image description here同じ値のエラーがある場合、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 
     { 
      // 
     } 
    } 
+0

をあなたは、このエラーがスローされたラインで言うことはありません。私は、 'e.Value =" ";'という行から推測しています。 IsTheSameCellValue(e.ColumnIndex、e.RowIndex)が何をしているのかは不明ですが、列の1つが数値型の場合、 'e.Value =" ";はこの代入でデータエラーをスローします。この行は 'CellFormatting'イベントにあるので、' IsTheSameCellValue(e.ColumnIndex、e.RowIndex) 'が何を返すのかによって、この値は任意のセルに設定される可能性があります。 – JohnG

+0

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

+0

追加されたコードを使用して現在の質問を編集する方が良いかもしれません。提供されたコードでも、私は繰り返し述べます。 'e.Value =" ";'行は 'CellFormatting'イベントを終了しようとするとこのエラーを投げます。例えば、IsTheSameCellValue(e.ColumnIndex、e.RowIndex)がtrueを返し、 'e.ColumnIndex == 0'を返した場合、データグリッドビューのチェックを設定できないため、この' DataError'を取得します。ボックスセルの値を「」に設定します。前に述べたように、同じことが数値列や日付にも当てはまります。 – JohnG

答えて

0

私は条件を追加することにより、thsi問題を解決:

private void grdDNSELECT_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) 
{ 
    try 
    { 
     if (e.RowIndex == 0|| e.ColumnIndex==0) 
      return; 
     if (IsTheSameCellValue(e.ColumnIndex, e.RowIndex)) 
     { 

      e.Value = ""; 
      e.FormattingApplied = true; 
     } 
    } 
    finally 
    { 
     // 
    } 
} 
関連する問題