2011-11-09 89 views
2

我正面临着datagridview的一个奇怪问题。 我需要改变所选单元格(A)的样式以响应另一个单元格(B)= x的值。 (A)是一个文本框,而(B)是一个组合框。 我发现事件CellEndEdit,当用户更改(B)的值时,一切正常:(A)的样式立即改变。Datagridview单元格样式更新

现在,当我尝试以编程方式更新datagridview时,这不起作用。 奇怪的是,两种方法共享同一个方法UpdateTimeChannelCell。 如果我以编程方式调用此方法,则datagridview不会更新其单元格的样式。我试图通过更新,令人耳目一新,在DataGridView没有运气

 private void UpdateTimeChannelCell(DataGridViewCellEventArgs e) 
    { 
     if (e.ColumnIndex == 1 || e.ColumnIndex == 3 || e.ColumnIndex == 5 || e.ColumnIndex == 7 || e.ColumnIndex == 9 || e.ColumnIndex == 11 || e.ColumnIndex == 13) 
     { 
      if ((int)this.dataGridView_TidKanaler.Rows[e.RowIndex].Cells[e.ColumnIndex].Value == 0) 
      { 
       this.dataGridView_TidKanaler.Rows[e.RowIndex].Cells[e.ColumnIndex - 1].Value = new Time(); 
       this.dataGridView_TidKanaler.Rows[e.RowIndex].Cells[e.ColumnIndex - 1].Style = disableStyle; 
      } 
      else 
      { 
       this.dataGridView_TidKanaler.Rows[e.RowIndex].Cells[e.ColumnIndex - 1].Style = enableStyle; 
      } 
     } 
    } 
+0

可以显示disableStyle和enableStyle代码 – Sandy

+0

this.enableStyle = new DataGridViewCellStyle(){ForeColor = Color.Black,SelectionBackColor = Color.LightSteelBlue}; this.disableStyle = new DataGridViewCellStyle(){ForeColor = Color.White,SelectionBackColor = Color.White}; – Francesco

回答

3

据我所知,所有的造型为DataGridViews需要在DataGridView.CellFormatting事件中发生失效。

此事件是您改变单元格的默认样式/着色的机会。

+0

你能举一个例子说明事件如何用来捕捉单元格中的值的变化吗? – Francesco

+0

与单元格格式化事件一样,您不捕获任何一个更改,每次更改DataGridView时都会触发每个单元格,因此您会根据当前状态检查单元格的样式。 http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.cellformatting%28v=vs.85%29.aspx – Gent

+0

@Gent this statement“DataGridViews的样式需要发生在DataGridView.CellFormatting“在我的一个表单中是不正确的,我更新了单元格值并同时设置了样式。 – Ken

0

我必须强制刷新我的网格才能更新样式。 例如。 this.dataGridView_TidKanaler.Refresh()

相关问题