DataGridView とラジオ ボタンのグループを動的に構築する非常に奇妙な問題に遭遇しました。Panel 内にラジオ ボタンのグループと DataGridView があります。私が直面している問題は、いくつかのラジオ ボタンのイベント ハンドラーを使用して、DataGridView の行数を取得しようとしていることです。私が使用している DataTable には 3 つの行があります。DGV に手動で行を追加することでこの問題を再現できますが、それは問題ではありません。DataGridView を初期化した後に rows.count を呼び出すと、計画どおりに動作して 3 が返されますが、EventHandler が起動されると返される行数は 0 です。私のコードは次のとおりです。
private DataSet testData;
private DataTable testDataTable;
public Form1(API _api)
{
InitializeComponent();
api = _api;
businessLayer = new BusinessLayer();
testData = api.getDataSet();
testDataTable = businessLayer.getDataTable(testData);
buildDataGridView();
}
// Build the DataGridView
private void buildDataGridView()
{
int numOfRows = testDataTable.Rows.Count;
DataGridView testDataGridView = new DataGridView();
testDataGridView.Columns.Add("Description", "");
testDataGridView.Columns.Add("Name", "");
testDataGridView.Rows.Add(numOfRows);
testDataGridView.Location = new Point(150, 20);
for (int i = 0; i < numOfRows; i++)
{
RadioButton rbutton = new RadioButton();
rbutton.Name = testDataTable.Rows[i].Field<string>("Name").ToString() + "RadioButton";
rbutton.Text = testDataTable.Rows[i].Field<string>("Name");
rbutton.Tag = testDataTable.Rows[i].Field<string>("SortOrder");
rbutton.CheckedChanged += rbutton_CheckedChanged;
if (i == 0)
{
rbutton.Checked = true;
}
rbutton.Location = new Point(5, 20 * (i + 1));
testPanel.Controls.Add(definition);
}
testPanel.Controls.Add(testDataGridView);
textBox1.Text = testDataGridView.Rows.Count.ToString();
}
// RadioButton CheckChanged EventHandler
private void definition_CheckedChanged(object sender, EventArgs e)
{
RadioButton rb = (RadioButton)sender;
if(rb.Checked)
{
textBox1.Text = testDataGridView.Rows.Count.ToString();
}
}
これは本当に私を混乱させましたが、私がそれを理解するなら、私はここで何かを学ぶに違いありません. これが DGV とラジオ ボタンがパネル内にあるという事実と関係があるかどうかはわかりません。わかりません...これについて助けてくれて、私が学ぶのを手伝ってくれてありがとう!