こんにちはそこに
この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;
}
}
は、誰も私が間違っているつもりですどこを教えて、右方向に私を指すことができます。事前に
多くのおかげで
腹筋
私には役に立たないものは見つかりませんでした。あなたのメソッド 'wbDataGridView_CurrentCellDirtyStateChanged'と' wbDataGridView_CellValueChanged'は、単純なDataGridViewに、チェックボックスの列として1つの列だけを接続すると、私のために働きました。投稿されたコードの残りの部分には、それが何らかの形で影響を与えるようなものは見られませんでした。 –