Выбранный флажок в шаблоне представления списка не сохраняется - PullRequest
0 голосов
/ 22 октября 2018

Я пытаюсь сохранить выбранные строки с помощью asp:checkbox в таблице CourseParticipants, но он не сохраняет выбранные записи в базе данных.Ошибка не отображается, но она обновляется на той же странице и показывает проверенные записи.Я пытаюсь выбрать пользователей.Заранее спасибо!

Вот разметка:

<table class="table table-hover">
    <thead style="background-color: #92d36e">
        <tr>
            <td><b>Employee Name</b></td>
            <td><b>Position</b></td>
            <td><b>Actions</b></td>
        </tr>
    </thead>
    <tbody>
        <asp:ListView ID="lvEmployees" runat="server" OnPagePropertiesChanging="lvEmployees_PagePropertiesChanging" OnDataBound="lvEmployees_DataBound">
            <ItemTemplate>
                <tr>
                    <td><%# Eval("FirstName")%>,<%# Eval("LastName")%></td>
                    <td><%# Eval("Position")%></td>
                    <td><asp:CheckBox ID="cbEmployee" runat="server" />
                                        </a></td>
                </tr>
            </ItemTemplate>
        </asp:ListView>
    </tbody>
</table>
<asp:Button ID="btnAddParticipants" runat="server"
            class="btn btn-success" OnClick="btnAddParticipants_Click"
            Text="Add Participants" />

Вот C #

void GetEmployees()
{
    using (SqlConnection con = new SqlConnection(Helper.GetCon()))
    {
        con.Open();
        string query = @"SELECT EmployeeID, FirstName, LastName, Position FROM Employees";
        using (SqlCommand cmd = new SqlCommand(query, con))
        {
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            DataSet ds = new DataSet();
            da.Fill(ds, "EmployeeID");
            lvEmployees.DataSource = ds;
            lvEmployees.DataBind();
            con.Close();
        }
    }
}

protected void btnAddParticipants_Click(object sender, EventArgs e)
{
    foreach (ListViewDataItem item in this.lvEmployees.Items)
    {
        string idValue = lvEmployees.DataKeys[item.DataItemIndex].Value.ToString();
        if (item.ItemType == ListViewItemType.DataItem)
        {
            CheckBox cb = (CheckBox)item.FindControl("cbEmployee");
            if (cb.Checked)
            {
                using (SqlConnection con = new SqlConnection(Helper.GetCon()))
                {
                    con.Open();
                    string query = @"INSERT INTO CourseParticipants VALUES (@TrainingModuleID, @EmployeeID, @Active, @DateAdded)";
                    using (SqlCommand cmd = new SqlCommand(query, con))
                    {
                        cmd.Parameters.AddWithValue("@TrainingModuleID", txtCourseID.Text);
                        cmd.Parameters.AddWithValue("@EmployeeID", idValue);
                        cmd.Parameters.AddWithValue("@Active", 1);
                        cmd.Parameters.AddWithValue("@DateAdded", DateTime.Now);
                        cmd.ExecuteNonQuery();
                        con.Close();
                    }
                }
            }
        }
    }
}

1 Ответ

0 голосов
/ 23 октября 2018

Если вы всегда хотите вставить DateTime.Now, вы можете использовать функцию getdate():

string query = @"INSERT INTO CourseParticipants VALUES (@TrainingModuleID, @EmployeeID, @Active, getdate())";

using (SqlCommand cmd = new SqlCommand(query, con))
{
    cmd.Parameters.AddWithValue("@TrainingModuleID", txtCourseID.Text);
    cmd.Parameters.AddWithValue("@EmployeeID", idValue);
    cmd.Parameters.AddWithValue("@Active", 1);
    cmd.ExecuteNonQuery();
}

Но это немного специфично для БД, так какую БД вы используете?https://docs.microsoft.com/en-us/sql/t-sql/functions/getdate-transact-sql?view=sql-server-2017

Я также приведу / преобразовал бы txtCourseID.Text в целое число (32 или 64) в зависимости от вашей схемы БД.Просто чтобы убедиться, что это значение ОК ... а не строка (nvarchar).Я также удалил закрытие соединения, так как оно находится в блоке using.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...