Winform中 DataGridView控件中的 CheckBox 的值读出来 始终 为 False ,已解决

        private void DGV_DetailsViewer_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.ColumnIndex.Equals(5))
            {
                DataGridViewCheckBoxCell cbx = (DataGridViewCheckBoxCell)this.DGV_DetailsViewer.Rows[e.RowIndex].Cells[e.ColumnIndex];

                MessageBox.Show(cbx.FormattedValue.ToString());
            }
        }

用的 以上这段代码 读出来 的checkBoxCell的值始终 为 False, 原因 不明。

 

原因是 :CellContentClick 事件 并不能修改 CheckBoxCell的值,靠 这个事件 不行。

 

正确的做法 应该是 利用 CurrentCellDirtyStateChanged 事件 和 CellValueChanged 事件 的 组合 来完成 这个功能。代码如下:

//这个事件先执行,即使得 修改后的 checkboxcell的内容立刻生效,否则只有离开这个单元格时 才会生效。     
   private void DGV_DetailsViewer_CurrentCellDirtyStateChanged(object sender, EventArgs e)
        {
            if (DGV_DetailsViewer.IsCurrentCellDirty)
            {
                DGV_DetailsViewer.CommitEdit(DataGridViewDataErrorContexts.Commit);
            }
        }

//值修改后,就执行这个事件,想要实现的功能 在这个事件里实现
 private void DGV_DetailsViewer_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex >= 0 && e.RowIndex != -1 && !this.DGV_DetailsViewer.Rows[e.RowIndex].IsNewRow)
            {

                if (e.ColumnIndex.Equals(5))
                {
                    DataGridViewCheckBoxCell cbx = (DataGridViewCheckBoxCell)this.DGV_DetailsViewer.Rows[e.RowIndex].Cells[e.ColumnIndex];

                    MessageBox.Show(cbx.FormattedValue.ToString());
                }
            }
        }

 

posted on 2018-05-02 17:59  陈德洲  阅读(429)  评论(0编辑  收藏  举报

导航