设置单选按钮由其文本从存储的数据集中为 C# 中的 WinForms 值检查
Set radio button checked by its Text from a stored Dataset's value for WinForms in C#
我有以下代码,用于根据数据集中的存储值,在 Windows 表单中将哪个单选按钮标记为 checked:
int rowNum = 0; //Row# is defined by system usage; value = 0 for example purposes
String storedValue = Convert.ToString(myDS.Tables["myTableName"].Rows[rowNum]["myColumn"]);
foreach (RadioButton button in this.myRBGroupBox.Controls) {
if (button.Text == storedValue) {
button.Checked = true;
}
}
这是解决这个问题的好方法吗?它是 lambda 的替代品吗?
感谢您的帮助。
好的,让我们使用 lambda 来做同样的事情而不需要显式循环。
int rowNum = 0;
string storedValue = Convert.ToString(myDS.Tables["myTableName"].Rows[rowNum]["myColumn"]);
RadioButton rb = myRBGroupBox.Controls
.OfType<RadioButton>()
.FirstOrDefault(x => x.Text == storedValue));
if(rb != null) rb.Checked = true;
好点了吗?好吧,您的原始代码有一些改进。
例如,OfType<RadioButton>
保证只从 GroupBox 的控件中获取单选按钮,而 FirstOrDefault
在找到第一个符合条件的单选按钮时停止枚举。
但是所有这些改进也可以在 'normal' code
中完成
foreach (Control ctrl in myRBGroupBox.Controls)
{
RadioButton rb = ctrl as RadioButton;
if (rb != null && rb.Text == storedValue) {
rb.Checked = true;
break;
}
}
我个人觉得最后一个更具可读性。
我有以下代码,用于根据数据集中的存储值,在 Windows 表单中将哪个单选按钮标记为 checked:
int rowNum = 0; //Row# is defined by system usage; value = 0 for example purposes
String storedValue = Convert.ToString(myDS.Tables["myTableName"].Rows[rowNum]["myColumn"]);
foreach (RadioButton button in this.myRBGroupBox.Controls) {
if (button.Text == storedValue) {
button.Checked = true;
}
}
这是解决这个问题的好方法吗?它是 lambda 的替代品吗? 感谢您的帮助。
好的,让我们使用 lambda 来做同样的事情而不需要显式循环。
int rowNum = 0;
string storedValue = Convert.ToString(myDS.Tables["myTableName"].Rows[rowNum]["myColumn"]);
RadioButton rb = myRBGroupBox.Controls
.OfType<RadioButton>()
.FirstOrDefault(x => x.Text == storedValue));
if(rb != null) rb.Checked = true;
好点了吗?好吧,您的原始代码有一些改进。
例如,OfType<RadioButton>
保证只从 GroupBox 的控件中获取单选按钮,而 FirstOrDefault
在找到第一个符合条件的单选按钮时停止枚举。
但是所有这些改进也可以在 'normal' code
foreach (Control ctrl in myRBGroupBox.Controls)
{
RadioButton rb = ctrl as RadioButton;
if (rb != null && rb.Text == storedValue) {
rb.Checked = true;
break;
}
}
我个人觉得最后一个更具可读性。