我在动态构建 DataGridView 和一组单选按钮时遇到了一个非常奇怪的问题。我在面板中有一组单选按钮和一个 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 和单选按钮位于面板内的事实有关,我不知道...感谢您对此提供的任何帮助并帮助我学习!