如何将CheckBoxList项发送到方法?

时间:2017-01-15 19:00:39

标签: c# asp.net

我想将两个颜色(如蓝色和红色)从CheckBoxList发送到一个方法,该方法需要4个可选参数并打印最终的组合结果。

这是复选框列表:

 Choose Two Colors:
    <asp:CheckBoxList ID="CheckBoxList1" runat="server" OnSelectedIndexChanged="CheckBoxList1_SelectedIndexChanged">
        <asp:ListItem>Red</asp:ListItem>
        <asp:ListItem>Blue</asp:ListItem>
        <asp:ListItem>Yellow</asp:ListItem>
        <asp:ListItem>Green</asp:ListItem>
    </asp:CheckBoxList>

这是一个需要4个可选参数的方法:

    static string ColorMixer(string Blue = "NotDefined", string Yellow = "NotDefined", string Red = "NotDefined",
    string Green = "NotDefined")
{

    string blue = Blue;
    string yellow = Yellow;
    string red = Red;
    string green = Green;
    string results;
    if (blue.Equals("Blue")&&yellow.Equals("Yellow"))
    {
        results = "GREEN";
        return results;
    }
    if (red.Equals("Red")& green.Equals("Green"))
    {
        results = "Brown";
        return results;
    }

   the rest of codes goes here ....

    else
    {
        results = "Result is Unspecified";
    }
    return results;
}

现在当有人从Checkboxlist中选择两种颜色时,我希望得到两种颜色,代码如下:

 protected void CheckBoxList1_SelectedIndexChanged(object sender, EventArgs e)
{
    foreach (ListItem item in CheckBoxList1.Items)
    {
        if (item.Selected)
        {

            string selectedoptions;
            selectedoptions = item.Text;
        }

    }

}

然后将选定的字符串项作为命名参数发送到方法

我们如何从字符串“selectedoptions”中获取所选颜色,然后将其格式化为?

  ColorMix(Blue:"Blue",Red:"Red")

用户选择“蓝色”和“红色”的颜色。

1 个答案:

答案 0 :(得分:0)

这不是ASP.Net,但我很确定这同样适用。我不认为你正在使用正确的事件来做你想做的事情。每次用户点击CheckBoxList1_SelectedIndexChanged并更改选中的项目时,都会触发事件CheckBoxList。即使没有更改复选框,事件也会触发。当然,您可以执行此处需要执行的操作,例如选中要检查的复选框并将某些变量传递给方法,但是每次用户更改选择时都会执行此操作。

我猜一个按钮可以更好地控制你的颜色方法。这样,在按下此按钮之前,您不会循环遍历项目。然后,您可以遍历列表并获取选中的颜色。如果仅检查一(1)种颜色或三种或更多颜色,则不清楚您想要做什么,因为帖子表明您只想传递两种颜色。

下面(c#代码)是我与CheckedListBox一起使用的代码,其中项目被命名为红色,蓝色,绿色和黄色。我使用Button_Click事件而不是CheckBoxList1_SelectedIndexChanged事件。按下按钮时,它只是遍历列表并显示项目索引,名称及其检查状态。

private void button1_Click(object sender, EventArgs e) {
  // Make a list of the checked colors you want to pass
  //List<string> checkedItems = new List<string>();
  int index;
  foreach (string item in checkedListBox1.Items) {
    index = checkedListBox1.Items.IndexOf(item);
    string checkState = checkedListBox1.GetItemCheckState(index).ToString(); 
    MessageBox.Show("Item on line " + index + " name: " + item +
                    " is currently: " + checkState);
  }
}

希望这有帮助!