2014-10-13 8 views
0

내가 뭘하는지는 두 데이터 테이블을 비교하여 변경 사항을 확인하는 것입니다. 표 셀 값이 변경되면 BackColor 속성을 변경하여 해당 DataGridView 셀을 표시합니다. 이것은 DataGridView.DefaultCellStyle.WrapMode = DataGridViewTriState.True 및 DataGridView.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells를 설정해야 할 때까지 완벽하게 작동했습니다. 텍스트를 셀 안의 새 줄로 옮길 수 있도록이 작업을 수행해야했습니다. Here이 설명 StackOverflow 답변입니다. 그래서 DefaultCellStyle을 설정 한 후에는 BackColor를 변경할 수 없었습니다. 그러나 DataGridViewCell을 전달하고 값의 유효성을 검사하는 Validator 클래스가 있습니다. 셀의 텍스트가 유효하지 않거나 올바른 형식이면 Style.BackColor가 변경됩니다 ...이 작동합니다! 내 질문에 왜 내 Validator 클래스 BackColor 변경할 수 있지만 양식에서 직접 수 없습니다? 다음의 간단한 예는 내가 뭐하는 거지와 제가 경험하고있다 :DataGridView DefaultCellStyle BackColor 변경 방지

여기
private void initDataGridView() 
    { 
     DataGridView.DefaultCellStyle.WrapMode = DataGridViewTriState.True; 
     DataGridView.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells; 
     DataGridView.MultiSelect = false; 
     DataGridView.AllowUserToAddRows = false; 
     DataGridView.AllowUserToDeleteRows = false; 
     DataGridView.RowHeadersVisible = false; 

     // ADD EVENT HANDLERS 
     DataGridView.CellEndEdit += DataGridView_CellEndEdit; 
    } 

    private void compareTables() 
    { 
     string dataTableCell; 
     string dataTableMirrorCell; 

     for (int rowIndex = 0; rowIndex < dataTable.Rows.Count; rowIndex++) 
     { 
      for (int colIndex = 2; colIndex < dataTable.Columns.Count; colIndex++) 
      { 
       // initialize cell values to compare 
       dataTableCell = dataTable.Rows[rowIndex].Field<string>(colIndex); 
       dataTableMirrorCell = dataTableMirror.Rows[rowIndex].Field<string>(colIndex); 

       // now compare cell values 
       if (dataTableCell != dataTableMirrorCell) 
       { 
        if (dataTableCell== null 
         || dataTableCell== string.Empty) 
        { 
         dataGridView.Rows[rowIndex].Cells[colIndex].Style.BackColor = Color.Red; 
         dataGridView.Rows[rowIndex].Cells[colIndex].Tag = "Delete"; 
        } 
        else 
        { 
         if (dataTableMirrorCell == null 
          || dataTableMirrorCell == string.Empty) 
         { 
          dataGridView.Rows[rowIndex].Cells[colIndex].Style.BackColor = Color.Orange; 
          dataGridView.Rows[rowIndex].Cells[colIndex].Tag = "Add"; 
         } 
         else 
         { 
          dataGridView.Rows[rowIndex].Cells[colIndex].Style.BackColor = Color.Yellow; 
          dataGridView.Rows[rowIndex].Cells[colIndex].Tag = "Change"; 
         } 
        } 
       } 
      } 
     } 
    } 

    private void dataGridView_CellEndEdit(object sender, DataGridViewCellEventArgs e) 
    { 
     DataGridView dgv = (DataGridView)sender; 
     Validator validator = new Validator(this); 

     if (e.ColumnIndex != dgv.Columns["Name"].Index) 
     { 
      DataGridViewCell cell = dgv.Rows[e.RowIndex].Cells[e.ColumnIndex]; 

      // Check the value for valid format 
      validator.validateCell(cell, ValidationType.Numeric);    
     } 
    } 

가 Validator.validateCell 방법입니다 :

public void validateCell(DataGridViewCell cell, String type) 
    { 
     // NUMERIC 
     if (type.ToLower() == "numeric") 
     { 
      int result; 
      if (!int.TryParse(cell.Value.ToString(), out result)) 
      { 
       cell.Style.BackColor = Color.Beige; 
       cell.Style.Font = new Font(this.form.Font, FontStyle.Bold); 
       cell.ToolTipText = "This is a " + type + " only field."; 
       cell.Tag = "invalid"; 
      } 
      else 
      { 
       cell.Style.BackColor = Color.White; 
       cell.Style.Font = new Font(this.form.Font, FontStyle.Regular); 
       cell.ToolTipText = string.Empty; 
       cell.Tag = "valid"; 
      } 
     } 
    } 

Validator.validateCell WORKS, 그것은 셀의 BackColor과 변화 세례반. 누군가가 왜 로컬 메소드 compareTables가 BackColor를 변경하지 않고 내 validator.validateCell이 변경되는지를 설명 할 수 있습니까? 내가 배울 수 있도록 도와 주신 것에 대해 많은 감사를드립니다!

답변

1

는 내가 항상 사용하고 있습니다 :

dataGridView.RowsDefaultCellStyle.SelectionBackColor = Color.Red; 

설정하거나 DataGridView에 배경 색상을 얻을 수 있습니다. 그게 당신이 다른 방향으로 볼 수 있는지 확실하지 않은 경우

+0

답장을 보내 주셔서 감사합니다! 글쎄, 이건 내가하려는 일이 아니야. RowsDefaultCellStyle.SelectionBackColor를 사용하면 현재 선택한 셀의 색상이 변경됩니다. 내가 원하는 것은 변경된 셀의 BackColor를 변경하는 것입니다. – waltmagic

+1

@wailmagic FormattingEvent를 설정해야 할 수도 있습니다. http://stackoverflow.com/questions/16105718/datagridview-changing-cell-background-color – Luk6e

+0

DGV에서 셀 서식을 지정하기 전에 CellFormatting 이벤트를 사용했습니다. CellFormatting을 사용하여 솔루션을 찾을 수 있는지 실험 해 보겠습니다. 내가 답하면 내 해결책을 다시보고 할 것입니다. 고마워요 Luk6e Logged – waltmagic