1

私は、datagridviewいくつかの textboxtype 列と 1 つのcheckboxtype 列を持つ を持っています。CheckBoxColumn は bool 型のプロパティでバインドします。

チェックボックスがチェックされている場合、それ以外の場合は図に示されているようにグリッドに表示されません。

ここに画像の説明を入力

データバインディングの完了にいくつかのコードを追加しましたが、コンパイル時エラーが発生しています"Property or indexer 'System.Windows.Forms.DataGridViewCell.Visible' cannot be assigned to -- it is read only"

private void dgvleftEdit_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{   
    var reportLogoList = cWShowInvoicePaymentDetailsBindingSource.List as IList<CWShowInvoicePaymentDetails>;

    foreach (DataGridViewRow row in dgvleftEdit.Rows)
    {
        var objReport = row.DataBoundItem as CWShowInvoicePaymentDetails;
        var findItem = from f in reportLogoList
                       //where f.fReportID == objReport.fKey
                       select f;
        if (objReport.IsImage == false)
        {
            this.dgvleftEdit.Rows[row.Index].Cells[7].Visible = false;
        }
        else
        {
            this.dgvleftEdit.Rows[row.Index].Cells[7].Visible = true;
        }
    } 
}

datagridview で特定のセルを非表示にすることは可能ですか?

4

2 に答える 2

1

に変更DataGridVIewCheckBoxColumnしますDataGridViewImageColumn

次に、のハンドラーでdatagridview.CellFormatting

private void datagridview_CellFormatting(object sender,
                                          dataGridViewCellFormattingEventArgs e) 
{
    if (e.RowIndex >= 0 && dataGridView1.Columns[e.ColumnIndex] is DataGridViewImageColumn)
    {
        if (e.Value != null && (bool)e.Value == true)
        {
            e.Value = My.Resources.yourCheckedImage;
        }
        else
        {
            e.Value = null;
        }
    }
}

次に、セルの更新は、MouseDownハンドラーまたはその他のハンドラーClickEnter..などで処理できます。

private void datagridview_MouseDown(Object sender, MouseEventArgs e)
{
    DataGridView dgv = (DataGridView)sender;
    DataGridView.HitTestInfo click = dgv.HitTest(e.Location.X, e.Location.Y);
    //If your have predefined columns, then maybe better compare by Column.name
    if(click.RowIndex >= 0 && dgv.Columns(click.ColumnIndex) is DataGridViewImageColumn)
    {
        DataGridViewCell cellTmp = dgv.Row(click.RowIndex).Cells(click.ColumnIndex);
        if (cellTmp.Value == null)
        {
            cellTmp.Value = My.Resources.yourCheckedImage;
        }
        else
        {
            cellTmp.Value = null;
        }
    }
}
于 2013-08-31T21:58:17.600 に答える