首页 > 解决方案 > 需要帮助将多个复选框列表中的数据插入数据库

问题描述

for (int i = 0; i < CheckBoxList3.Items.Count + 1; i++)
             {
               if (CheckBoxList3.Items[i].Selected || CheckBoxList4.Items[i].Selected || CheckBoxList5.Items[i].Selected)
                {
                    str1 += CheckBoxList3.Items[i].Text.ToString() + "," + CheckBoxList4.Items[i].Text.ToString() +"," + CheckBoxList5.Items[i].Text.ToString() + ",";

我收到错误调用“索引超出范围。必须为非负数且小于集合的大小。参数名称:索引”。如何解决这个问题?

我想要做的是从多个复选框列表中的复选框中收集数据并将其组合在一起并将其存储到数据库中。

任何建议或帮助都会很棒。谢谢

更新:这是我的复选框列表之一。错误指向我的 for 循环的第二行。

 <asp:CheckBoxList ID="CheckBoxList3" runat="server" RepeatDirection="Horizontal" Width="900px">
            <asp:ListItem>Chicken</asp:ListItem>
            <asp:ListItem>Tomato</asp:ListItem>
            <asp:ListItem>Garlic</asp:ListItem>
        </asp:CheckBoxList>

标签: c#asp.netcheckboxlist

解决方案


错误的第 1 行: for (int i = 0; i < CheckBoxList3.Items.Count + 1; i++

错误的第 2 行: CheckBoxList3.Items[i].Selected || CheckBoxList4.Items[i].Selected || CheckBoxList5.Items[i].Selected

错误的第 3 行: str1 += CheckBoxList3.Items[i].Text.ToString() + "," + CheckBoxList4.Items[i].Text.ToString() +"," + CheckBoxList5.Items[i].Text.ToString() + ",";

您需要将 for 循环条件从更改CheckBoxList3.Items.Count + 1CheckBoxList3.Items.Count

此外,您只检查条件CheckBoxList3.Items.Count,但您正在使用CheckBoxList4.Items.CountCheckBoxList5.Items.Count

似乎CheckBoxList4CheckBoxList5没有足够的项目,如 CheckBoxList3。

请检查所有单独的 CheckboxList 对象以使用相同的索引器。

希望这可以帮助。

//编辑

最佳实践:

string result = CombineCheckboxLists(checkBoxList1, checkBoxList2, checkboxlist3);

 private string CombineCheckboxLists(params CheckBoxList[] list)
    {
        StringBuilder builder = new StringBuilder();
        string result = string.Empty;
        if (list?.Length > 0)
        {
            int minItemsCount = list.Min(l => l.Items.Count);

            if (minItemsCount > 0)
            {
                for (int i = 0; i < minItemsCount; i++)
                {
                    builder.Append(string.Join(",", list
                        .Where(l => l.Items[i].Selected)
                        .Select(l=> l.Items[i].Text)));

                    //if you want to merge all iteration via ",", please use following lines instead of above -- [marked as **] 
                    // ** //builder.Append($"{string.Join(",", list.Select(l => l.Items[i].Value))},");
                }
            }
        }

        result = builder.ToString();
        // ** // result = result.TrimEnd(',');

        return result;
    }

推荐阅读