2014-09-24 4 views
0

я добавил флажок datagridview как этотНеактивный флажок в DataGridView VB.NET

Dim CbxColumn As New DataGridViewCheckBoxColumn 
       With CbxColumn 
        .HeaderText = "" 
        .Name = "Return" 
        .Width = 50 
       End With 
       dgvDetail.Columns.Insert(0, CbxColumn) 

, когда я запустить его показать правильно, но теперь я хочу, чтобы отключить некоторые строки на DataGridView динамически не каждая строка только некоторые строки зависит от других значение в том, что строки я имею в виду, когда column2 имеют значение «Открыть» я стараюсь делать как этот

For i = 0 To dgvDetail.Rows.Count - 1 
        If dgvDetail.Rows(i).Cells(1).Value = "Open" Then 
    //I want to do what i expect here// 
         dgvDetail.Rows(i).Cells(1).ReadOnly = True 
        End If 
       Next 

, но это просто не может изменить значение, но я предпочитаю хочу, чтобы отключить, как серый цвет или неактивный контроль, когда мы set buttoncontrol.enabled=false Что мне делать? Ks так много

ответ

1

Попробуйте:

private void dataGridView1_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e) 
{ 
    if (e.RowIndex == 1) 
    { 
     DataGridViewCell cell=dataGridView1.Rows[e.RowIndex].Cells[0]; 
     DataGridViewCheckBoxCell chkCell = cell as DataGridViewCheckBoxCell; 
     chkCell.Value = false; 
     chkCell.FlatStyle = FlatStyle.Flat; 
     chkCell.Style.ForeColor = Color.DarkGray; 
     cell.ReadOnly = true; 

    } 

} 
+0

FlatStyle.Flat может работать. – loveisbug

0

Почему вы не просто отключить ячейку, как вы упомянули (только для чтения), но и установить его BackColor:

dgvDetail.Item(1, i).Style.BackColor = Color.LightGray 
0

Вы можете просто достичь это, отключив DataGridViewCell в

private void enableCell(DataGridViewCell row, bool enabled) { 
    //toggle read-only state 
    row.ReadOnly = !enabled; 
    if (enabled) 
    { 
     //restore cell style to the default value 
     row.Style.BackColor = row.OwningColumn.DefaultCellStyle.BackColor; 
     row.Style.ForeColor = row.OwningColumn.DefaultCellStyle.ForeColor; 
    } 
    else { 
     //gray out the cell 
     row.Style.BackColor = Color.LightGray; 
     row.Style.ForeColor = Color.DarkGray; 
    } 
} 

или вы можете степени выше код DISABL e целое DataGridViewRow путем итерации через каждую ячейку.

0

Пожалуйста, проверьте этот ответ: https://stackoverflow.com/a/1626948/1361234

И я нашел проект, чтобы сделать это: http://www.codeproject.com/Articles/31829/Disabled-Checkbox-Column-in-the-DataGridView

Но, я использовал этот метод в ответ @Thirisangu «s, он может работать. Спасибо, Тирисангу.

chkCell.FlatStyle = FlatStyle.Flat; 
    chkCell.Style.ForeColor = Color.DarkGray; 
    cell.ReadOnly = true; 
Смежные вопросы