Я ценю любое понимание, в котором я ошибаюсь в этом процессе. Довольно новый в этом и бьется головой о стену на этом. Наверное, что-то простое.
После поиска, чтобы найти примеры, я использую ретранслятор, который я заполнил с помощью 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();
}
}
}
}
Спасибо за любую помощь.
Вам нужно AssignCB
в CheckBoxList. FindControl() просто возвращает System.Web.UI.Control
.
CheckBoxList cb = (CheckBoxList)ri.FindControl("AssignCB");
if (cb.value != null)
может быть простоif (cb != null)
. Опять же, это может не решить вашу проблему, но это несколько вещей, на которые следует обратить внимание. Обновите свой код, если это поможет, чтобы мы могли помочь вам с вашей проблемой ...