Пакетная вставка из элемента управления Repeater с помощью флажка

1

Я ценю любое понимание, в котором я ошибаюсь в этом процессе. Довольно новый в этом и бьется головой о стену на этом. Наверное, что-то простое.

После поиска, чтобы найти примеры, я использую ретранслятор, который я заполнил с помощью SqlDataSource и добавил checkboxlist со статическими значениями, которые я пытаюсь вставить в Sql Server DB при нажатии кнопки из нижнего колонтитула повторителя. Предполагается, что он должен вставляться только из строк, которые имеют значение для checkboxlist для пользователей, которым была назначена задача.

Я получаю следующую ошибку

CS0266: Cannot implicitly convert type 'System.Web.UI.Control' to 'System.Web.UI.WebControls.CheckBoxList'. An explicit conversion exists (are you missing a cast?)

Если я закомментирую оператор if в списке, страница будет построена без ошибки, но вставка не будет завершена.

Я исследовал ошибку, но не совсем понимаю, что именно я делаю неправильно, проверяя значение checkboxlist в инструкции if, чтобы выбрать строки со значениями.

Вот мой код:

 <asp:Repeater ID="Repeater3" runat="server" DataSourceID="TaskAssignReviewSDS">
        <FooterTemplate>
            <asp:Button ID="Button1" runat="server" Text="Add Users" />
        </FooterTemplate>
        <ItemTemplate>
            <asp:Table ID="Table1" runat="server" Width="400px">
                <asp:TableRow>
                    <asp:TableCell Width="40%">
                        <asp:HiddenField ID="UserIdHidden" runat="server" Value='<%# Bind("UserId") %>' />
                        <asp:Label ID="UserNamelbl" runat="server" Text='<%# Bind("UserName") %>'></asp:Label>
                    </asp:TableCell>
                    <asp:TableCell Width="60%">
                            <asp:CheckBoxList ID="AssignCB" RepeatDirection="Horizontal" runat="server">
                            <asp:ListItem Value="1">Assign</asp:ListItem>
                            <asp:ListItem Value="2">Review</asp:ListItem>
                        </asp:CheckBoxList>
                    </asp:TableCell>
                </asp:TableRow>
            </asp:Table>
        </ItemTemplate>
    </asp:Repeater>

И связанные с кликом codebehind:

 protected void Button1_Click(object sender, EventArgs e)
    {

        foreach (RepeaterItem ri in Repeater3.Items)
        {

            CheckBoxList cb = ri.FindControl("AssignCB");
            if (cb.value != null)
            {
                string TasksId = Request.QueryString["TasksId"].ToString();
                string UserId = ((HiddenField)ri.FindControl("UserIdHidden")).Value;
                string Assignation = ((TextBox)ri.FindControl("AssignCB")).Text;
                //do inserting process using above values.


                string insertSql = "INSERT INTO TaskUser(UserId,TasksId, Assignation) VALUES(@UserId, @TasksID,@Assignation) ";

                using (SqlConnection myConnection = new SqlConnection("Data Source={*MyserverIP*}\\SQLEXPRESS12;Initial Catalog=MyDBName;User ID=****;Password=*****"))
                using (SqlCommand myCommand = new SqlCommand(insertSql, myConnection))
                {
                    myConnection.Open();


                    myCommand.Parameters.AddWithValue("@TasksID", TasksId);
                    myCommand.Parameters.AddWithValue("@UserId", UserId);
                    myCommand.Parameters.AddWithValue("@Assignation", Assignation);
                    myCommand.ExecuteNonQuery();

                    myConnection.Close();
                }


            }

            }

    }

Спасибо за любую помощь.

  • 0
    string Assignation = ((TextBox) ri.FindControl ("AssignCB")). Text; является проблемой, замените ее ссылкой на флажок, который может привести к вашей следующей ошибке.
  • 0
    Я также предполагаю, что if (cb.value != null) может быть просто if (cb != null) . Опять же, это может не решить вашу проблему, но это несколько вещей, на которые следует обратить внимание. Обновите свой код, если это поможет, чтобы мы могли помочь вам с вашей проблемой ...
Показать ещё 3 комментария
Теги:
sql-server
batch-processing
webforms

1 ответ

0

Вам нужно AssignCB в CheckBoxList. FindControl() просто возвращает System.Web.UI.Control.

CheckBoxList cb = (CheckBoxList)ri.FindControl("AssignCB");

Ещё вопросы

Сообщество Overcoder
Наверх
Меню