none
datagridview增加自定義控件(CheckBox)問題 RRS feed

  • 問題

  • 部份程序如下:
    我是由章立民I/O書中引用的,但是結果就是:
    當click了第一次之後,再click之後還是在勾選狀態,不能取消,這是甚麽原因呀?

    請問是哪一部份出現了問題呢?

    private void dataGridView1_CellValuePushed(object sender, DataGridViewCellValueEventArgs e)     
            {     
                if (e.ColumnIndex == 0)     
                {     
                    // 從「PrimaryCode」資料行取得訂單號碼。     
                    int myPrimaryCode = (int)(dataGridView1.Rows[e.RowIndex].Cells["PrimaryCode"].Value);     
        
                    // 如果索引鍵(也就是PrimaryCode)已經存在,則於泛用字典物件中更新核取的值;     
                    // 如果索引鍵(也就是PrimaryCode)不存在,則於泛用字典物件中新增索引鍵與核取的值。     
                    if (!checkState.ContainsKey(myPrimaryCode))     
                    {     
                        checkState.Add(orderID, (bool)(e.Value));     
                    }     
                    else    
                    {     
                        checkState[orderID] = (bool)(e.Value);     
                    }     
                }     
            }     
        
            private void dataGridView1_CellValueNeeded(object sender, DataGridViewCellValueEventArgs e)     
            {     
                if (e.ColumnIndex == 0)     
                {     
                    int myPrimaryCode = (int)(dataGridView1.Rows[e.RowIndex].Cells["PrimaryCode"].Value);     
        
                    if (checkState.ContainsKey(myPrimaryCode))     
                    {     
                        e.Value = checkState[myPrimaryCode];     
                    }     
                    else    
                    {     
                        e.Value = false;     
                    }     
                }     
            }     
        
            private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)     
            {     
                if (e.ColumnIndex == 0)     
                {     
                    bool chkOriginalValue = (bool)(dataGridView1.Rows[e.RowIndex].Cells[0].Value);     
        
                    dataGridView1.Rows[e.RowIndex].Cells[0].Value = (bool)(dataGridView1.Rows[e.RowIndex].Cells[0].FormattedValue);     
        
                    dataGridView1.Rows[e.RowIndex].Cells[0].Value = !chkOriginalValue;     
                }     
            }     
        
     
    2009年3月20日 上午 10:18

所有回覆

  • 還有,我是用VirtualMode的,請各位高手解答

    dataGridView1.VirtualMode = true;  

                DataGridViewCheckBoxColumn colCheck = new DataGridViewCheckBoxColumn();  

     

                dataGridView1.Columns.Insert(0, colCheck);  

                dataGridView1.Columns[0].Resizable = DataGridViewTriState.False;  

                dataGridView1.Columns[0].Frozen = true;  

                dataGridView1.Columns[0].Width = 25;  

                dataGridView1.Columns[0].DividerWidth = 2;  

                colCheck.TrueValue = "0";  

                colCheck.FalseValue = "1";  

                checkState = new System.Collections.Generic.Dictionary<intbool>();  

     

                foreach (DataGridViewColumn c in dataGridView1.Columns)  

                {  

                    if (!(c.Index == 0))  

                    {  

                        c.ReadOnly = true;  

                    }  

                } 

    2009年3月20日 上午 10:20