我有几个动态填充在表单上的单选按钮,我在动态创建的单选按钮上设置了一个单击事件。点击后,通过调试(例如)“sender {Text =”这是答案一“+ Checked =”True“}使用以下代码获得返回值:
//Radio button click:
void Form1_Click(object sender, EventArgs e)
{
RadioButton rb = sender as RadioButton;
string radioButtonValue = rb.Text;
if (radioButtonValue != String.Empty)
{
}
}
调试值通过“RadioButton rb = sender as RadioButton;”返回。 - 不同的单选按钮文本是通过我在本地数据集中调用的数据集设置的,该数据集循环遍历数据集并相应地设置单选按钮文本(例如):
for (int i = 0; i < _dataSetRadioButtons.Tables["tbl_QuestionnaireAnswer"].Rows.Count; i++)
{
radioButtons[i] = new RadioButton();
radioButtons[i].AutoCheck = true;
radioButtons[i].Text = _dataSetRadioButtons.Tables["tbl_QuestionnaireAnswer"].Rows[i]["tbl_QuestionnaireAnswer_Description"].ToString();
radioButtons[i].Location = new System.Drawing.Point(60, 20 + i * 20);
radioButtons[i].Click += new EventHandler(Form1_Click);
panel.Controls.Add(radioButtons[i]);
}
所以:wat id想知道是在单选按钮上单击(Form1_Click)事件是否可以返回我选择的所选单选按钮的主键而不仅仅是发件人{Text =“这是答案一个“+ Checked =”True“}因为我想使用该数据集中的primarykey写回我的数据库。
提前致谢。 亲切的问候 地理
答案 0 :(得分:1)
大多数winforms控件包含Tag属性,用于在控件中包含自定义用户数据。您可以在以下网址了解详情:http://msdn.microsoft.com/en-us/library/system.windows.forms.control.tag.aspx
因此,您的解决方案应该更简单,更简洁:
for (int i = 0; i < _dataSetRadioButtons.Tables["tbl_QuestionnaireAnswer"].Rows.Count; i++)
{
radioButtons[i] = new RadioButton();
radioButtons[i].AutoCheck = true;
radioButtons[i].Location = new System.Drawing.Point(60, 20 + i * 20);
radioButtons[i].Tag = _dataSetRadioButtons.Tables["tbl_QuestionnaireAnswer"].Rows[i];
radioButtons[i].Click += new EventHandler(Form1_Click);
panel.Controls.Add(radioButtons[i]);
}
这包括radiobutton中的相关数据行。接下来就是从中获取所需的任何数据:
//Radio button click:
void Form1_Click(object sender, EventArgs e)
{
RadioButton radioButton = sender as RadioButton;
if (radioButton == null)
return;
DataRow row = radioButton.Tag as DataRow;
if (row == null)
return;
/* Post any processing here. e.g.
MessageBox.Show(row["ID"].ToString());
*/
}
这样你就拥有了所有的数据,并且它是强类型的,这是一件好事。