2016-06-21 44 views
1

有什麼方法可以根據用戶不可見的列中的某個值設置行的樣式嗎?網格包含幾行,我希望一些行如果被刪除就會被塗成紅色。如果列被刪除,我有一個隱藏的列存儲true,否則爲false。我試過CellFormatting,但由於我的列不可見,因此e.ColumnIndex從未爲我的隱藏列提供正確的值。基於隱藏列的DataGridView行格式化

任何幫助將不勝感激。

編輯:

下面是什麼,我試圖完成的圖像。您可以看到第二行的文本爲紅色,這是由於用戶在數據網格中看不到的列中的值所致。當用戶第一次看到表單時(這是第一次),這個網格應該像這樣着色。

enter image description here

+0

請發佈一個MCVE。預期結果的圖片也會有所幫助 – ASh

回答

0

相反的CellFormatting,嘗試CellValueChanged對於非綁定數據或DataBindingComplete一個綁定的數據集。例如,假設你是「刪除/取消刪除」使用下面的Button.Click事件中的一行:

private void Button1_Click(object sender, EventArgs e) 
{ 
    bool value = (bool)dataGridView1.CurrentRow.Cells["Deleted"].Value; 
    dataGridView1.CurrentRow.Cells["Deleted"].Value = !value; 

    // For bound data (like a DataTable) add the following line: 
    // ((DataTable)dataGridView1.DataSource).AcceptChanges(); 
} 

綁定數據

更改行以這種方式「刪除」的列值將觸發以下事件處理器。因此,您可以用顏色的基礎上TrueFalse該列的值的行:

private void DataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e) 
{ 
    if (e.ColumnIndex == dataGridView1.Columns["Deleted"].Index) 
    { 
     dataGridView1.Rows[e.RowIndex].DefaultCellStyle.ForeColor = (bool)dataGridView1[e.ColumnIndex, e.RowIndex].Value ? Color.Red : Color.Black; 
    } 
} 

數據綁定

對於綁定數據,比如從DataTable,處理DataBindingComplete事件就足夠了。此事件將在綁定第一次設置以及更改後觸發 - 例如Button1.Click事件的更改。在這裏,您將遍歷行並根據隱藏列的值設置所需的樣式。 (注意在Button1_Click事件處理程序的附加變化對於具有DataTable源網格這是需要給立即風格上的變化 - 否則它不會發生,直到您導航到不同的行)

private void DataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e) 
{ 
    foreach (DataGridViewRow row in dataGridView1.Rows) 
    { 
     row.DefaultSCellStyle.ForeColor = (bool)row.Cells["Deleted"].Value ? Color.Red : Color.Black; 
    } 
} 
0

根據我的理解,你想獲得一個列的值時,列在DataGridView中一個看不見的列。

是不是?如果我錯了,請糾正我。

private void button1_Click(object sender, EventArgs e) 
{ 
    dataGridView1.DataSource = CreateDataTable(); 
    dataGridView1.Columns["ID"].Visible = false; // Set the ID column invisible. 
    MessageBox.Show(dataGridView1.Rows[2].Cells["ID"].Value.ToString()); // Get the ID column value. 
} 
+0

我需要根據dataGridView中不可見的列中的某些值對某些行着色。我可以得到這個值,但我想用一些事件來爲行着色。 – Rocshy