Radiobuttons,如何替换所有那些if语句

时间:2015-05-11 17:28:55

标签: c# wpf if-statement

我的程序中的几个地方,必须检查与所选项目匹配的RadioButton,并且我有很多if语句,如下所示:

DataRowView TempRow = (DataRowView)ScheduleDataGrid.SelectedItem;

if (Convert.ToString(TempRow["Bio"]) == "Bio1")
{
    BioRB1.IsChecked = true;
}
if (Convert.ToString(TempRow["Bio"]) == "Bio2")
{
    BioRB2.IsChecked = true;
}
if (Convert.ToString(TempRow["Bio"]) == "Bio3")

依此类推......我想用简短而聪明的东西取代所有这些。 我尝试使用bio的编号来关联按钮,如下所示:

string bioselected = Convert.ToString(TempRow["Bio"]);

int i = Convert.ToInt16(bioselected.Substring(bioselected.Length - 1, 1));

BioRB[i].IsChecked = true;

但是做BioRB [i]不起作用,它忽略[i]并说BioRB不存在。还有其他建议吗?

2 个答案:

答案 0 :(得分:3)

BioRB[i]没有像你认为的那样做任何事情。所有变量引用(包括控件)都必须在编译时明确定义 - 您不能通过构建与名称匹配的字符串来引用控件的名称。**

尝试创建单选按钮列表。然后你可以索引到列表:

List<RadioButton> radioButtons = new List<RadioButton>()
{
    BioRB1,
    BioRB2
};

string bioselected = Convert.ToString(TempRow["Bio"]);
int i = Convert.ToInt16(bioselected.Substring(bioselected.Length - 1, 1));
radioButtons[i].IsChecked = true;

**从技术上讲,你可以通过反思来做到这一点,但它比你尝试过的要复杂得多。

答案 1 :(得分:0)

也许这会更好看:

string caseSwitch = Convert.ToString(TempRow["Bio"]);
switch (caseSwitch)
{
    case "Bio1":
        BioRB1.IsChecked = true;
        break;
    case "Bio2":
        BioRB2.IsChecked = true;
        break;
    case "Bio3":
        BioRB3.IsChecked = true;
        break;
    default:
        Console.WriteLine("Default case...is optional");
        break;
}

另外,尝试做Alybaba726所说的并使用CellContentClick或类似的东西:

    private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
    {
        DataGridView dgv = (DataGridView)sender;
        if(e.ColumnIndex == dgv.Columns["Bio"].Index)
        {
            string bioSelected = dgv.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString();

            switch (bioSelected)
            {
                case "Bio1":
                    BioRB1.IsChecked = true;
                    break;
                case "Bio2":
                    BioRB2.IsChecked = true;
                    break;
                case "Bio3":
                    BioRB3.IsChecked = true;
                    break;
                default:
                    Console.WriteLine("Default case...this is optional");
                    break;
            }
        }
    }