2017-04-21 8 views
0


こんにちはそこに
このC#の問題で私を助けてくれる人は誰ですか?私はこれに私の髪を引き裂いています。必要なだけ多くの情報を提供します。私はDataGridViewCheckBoxColumnイベントを動作させることができません。私がチェックボックスをクリックしても、常にFALSEの値が得られます。他のdatagridviews(textとcombobox)カラムは正常に動作します。ここで私がやっていることは... ...

OK、私は動的に作成者の実行時に、タブコントロール内のタブシートの数に基づいて、任意の週数で決定されるデータグリービュー(DGV)を作成していますそれぞれのDataGridViewについて(各週のごタブページ)コンストラクタで再びC#プログラマチックに作成されたDataGridView - DataGridViewCheckBoxColumn cellValueChangedチェック状態は常にFALSEを返す

for (int i = 0; i < wcNumWeeks; i++) 
{ 
    foreach (DataRow dr in wbDatesDT.Rows) 
    { 
     if (Convert.ToInt16(dr["tabNo"].ToString()) == i + 1) 
     { 
     wcDate = Convert.ToDateTime(dr["wcDate"].ToString()); 
     break; 
     } 
    } 
    weeksTabControl.TabPages.Add(wcDate.ToShortDateString()); 
    weeksTabControl.TabPages[i].AutoScroll = true; 
    weeksTabControl.TabPages[i].Width = 1500; 
    weeksTabControl.TabPages[i].Height = 700; 
    weeksTabControl.TabPages[i].Controls.Add(new DataGridView() 
    { 
     Name = "dataGridView" + (i + 1).ToString(), 
     Dock = DockStyle.Fill, 
     Width = 1450, 
     Height = 650, 
     Anchor = (AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right), 
     ScrollBars = System.Windows.Forms.ScrollBars.Both, 
     AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells 
    }); 
} 

は、次のように私はイベントを作成しています作成したタブページごとに1 DGV日付範囲、すなわち与えられた:

foreach (Control thisControl in weeksTabControl.Controls) 
{ 
    if (thisControl.GetType() == typeof(TabPage)) 
    { 
     foreach (Control dgv in thisControl.Controls) 
     { 
     if (dgv.GetType() == typeof(DataGridView)) 
     { 
      BuildWhiteboardDGV((DataGridView)dgv); 
      PopulateWhiteboardDGV((DataGridView)dgv); 
      wbDataGridView = (DataGridView)dgv; 
      wbDataGridView.CellMouseUp += new DataGridViewCellMouseEventHandler(wbDataGridView_CellMouseUp); 
      wbDataGridView.CellEndEdit += new DataGridViewCellEventHandler(wbDataGridView_CellEndEdit); 
      wbDataGridView.CurrentCellDirtyStateChanged += new EventHandler(wbDataGridView_CurrentCellDirtyStateChanged); 
      wbDataGridView.CellValueChanged += new DataGridViewCellEventHandler(wbDataGridView_CellValueChanged); 

     } 
     } 
    } 
} 

012以下のように自身があるの イベント:

void wbDataGridView_CurrentCellDirtyStateChanged(object sender, EventArgs e) 
{ 
    if (wbDataGridView.IsCurrentCellDirty) 
    { 
    wbDataGridView.CommitEdit(DataGridViewDataErrorContexts.Commit); 
    } 
} 
  
void wbDataGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e) 
{ 
    try 
    { 
    if (e.ColumnIndex >= 13 && e.ColumnIndex <= 15) 
    { 
     System.Drawing.Point cur = new System.Drawing.Point(e.ColumnIndex, e.RowIndex); 
     DataGridViewCheckBoxCell curCell = (DataGridViewCheckBoxCell)wbDataGridView[cur.X, cur.Y]; 
     if (curCell.Value != null && (bool)(curCell.Value) == true) 
     { 
     MessageBox.Show("TRUE"); 
     } 
     else if (curCell.Value != null && (bool)(curCell.Value) == false) 
     { 
     MessageBox.Show("FALSE"); 
     } 
     else 
     { 
     MessageBox.Show("NULL"); 
     }     
    } 
    return; 
    } 
    catch (Exception ex) 
    { 
    MessageBox.Show("wbDataGridView_CellValueChanged() ERROR - " + ex.Message + " --> " + ex.InnerException.ToString()); 
    return; 
    } 

} 


は、誰も私が間違っているつもりですどこを教えて、右方向に私を指すことができます。事前に

多くのおかげで

腹筋

+1

私には役に立たないものは見つかりませんでした。あなたのメソッド 'wbDataGridView_CurrentCellDirtyStateChanged'と' wbDataGridView_CellValueChanged'は、単純なDataGridViewに、チェックボックスの列として1つの列だけを接続すると、私のために働きました。投稿されたコードの残りの部分には、それが何らかの形で影響を与えるようなものは見られませんでした。 –

答えて

0

OK ....私はそれをソートしたと思います。

私のCellMouseUp()イベントでは、私はLEFTボタンを注文していませんでした。

したがって、これを追加することで、CellValueChanged()イベントは正しく機能し、正しいDataGridViewCheckCellColumnチェック状態をキャプチャします。チェックされている場合はTRUE、チェックされていない場合はFALSEです。

public void wbDataGridView_CellMouseUp(object sender, DataGridViewCellMouseEventArgs e) 
     { 
      if (e.Button == System.Windows.Forms.MouseButtons.Left && e.RowIndex != -1) // added this and it now works 
      { 
       this.rowIndex = e.RowIndex; 
       this.colIndex = e.ColumnIndex; 
       this.wbDataGridView = (DataGridView)sender; 
       return; 
      } 

      if (e.Button == System.Windows.Forms.MouseButtons.Right && e.RowIndex != -1) 
      { 
       this.rowIndex = e.RowIndex; 
       this.colIndex = e.ColumnIndex; 
       this.wbDataGridView = (DataGridView)sender; 
       return; 
      } 
     } 

ご意見ありがとうございます。とても有難い。

ジョブa good un !!!!

関連する問題