Как сохранить отмеченный статус для флажка в представлении сетки данных приложения C # Windows - PullRequest
0 голосов
/ 12 февраля 2019

Я работаю в c # приложении Windows, заполняющем запись с сервера sql в представление сетки данных, с возможностью динамического флажка в каждой строке.я хочу выбрать выбранные строки для какой-либо цели через флажок этой конкретной строки.до сих пор я успешно достигаю своей цели.но я сталкиваюсь с незначительной проблемой, связанной с сохранением проверенного состояния, например, я хочу проверять только те записи, у которых Name = Max, у меня есть текстовое поле в этом текстовом поле, я вызываю текстовое событие chnage, например Query

Код для фильтрапо имени:

 try
        {
            SqlCommand cmd = null;
            SqlConnection con = null; Ranks rank = new Ranks();
            con = new SqlConnection(cs.DBcon);
            con.Open();
            cmd = con.CreateCommand();
            cmd.CommandText = "Select * from Records where Name like @Name order by Pno";
            cmd.Parameters.AddWithValue("@Name", "%" + FilterByNameTextbox.Text.Trim() + "%");
            SqlDataAdapter adapter1 = new SqlDataAdapter(cmd);
            DataTable dt = new DataTable();
            adapter1.Fill(dt);

            dataGridView1.DataSource = dt;
            Make_fields_Colorful();
        }
        catch (Exception exception)
        {
            MessageBox.Show(exception.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);
        }

если я напишу Макс в фильтре по текстовому полю имени, он вернет 3 записи с именем, начинающимся с макс, используя аналогичный запрос, как я упоминал выше.поэтому я проверяю только 2 записи из 3, используя динамический флажок, до сих пор мой код работает отлично.Теперь я хочу проверить записи, имя которых начинается с Али, теперь, когда я пишу Али в моем фильтре по текстовому полю имени, он будет возвращать строки, где имя, как Али, но проблема возникает здесь, он удалит мои предыдущие проверенные записи, так как я смог бысохранить проверенные записи для строк max и ali:

Код для добавления динамических флажков в каждой строке

   DataGridViewCheckBoxColumn checkBoxColumn = new DataGridViewCheckBoxColumn();
        checkBoxColumn.Name = "checkBoxColumn";
        checkBoxColumn.DataPropertyName = "Report";
        checkBoxColumn.HeaderText = "Report";
        dataGridView1.Columns.Insert(10, checkBoxColumn);
        dataGridView1.RowTemplate.Height = 100;
        dataGridView1.Columns[10].Width = 50;

1 Ответ

0 голосов
/ 12 февраля 2019

Чтобы сохранить флажок, вам необходимо сохранить состояние флажка для каждой строки.

Шаг 1

Добавить новый столбец в Record стол.например.CheckState of BIT (Здесь BIT Тип столбца SQL Server, в котором хранятся логические значения)

Шаг 2

Теперь добавьте код, чтобы перехватить изменение состояния флажка, используяCurrentCellDirtyStateChanged событие DataGridView.Ниже приведен пример кода;

private void dataGridView1_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{

    if (dataGridView1.CurrentCell is DataGridViewCheckBoxCell)
    {
        bool checkVal = (Boolean)dataGridView1.CurrentCell.EditedFormattedValue;       // Check box state value
        int checkBoxState = checkVal ? 1 : 0;       // 1 - TRUE, 0 - FALSE

        // Now save the check box state change in the database table.

        // You would need a key field to distinguish the record in the DB table
        // As per the code you had provided you could do something similar to below, assuming that the Pno column is the key field/ unique

        int keyValue = (int)dataGridView1.CurrentRow.Cells["Pno"].Value;

        // Save the changes by passing checkBoxState and keyValue accordingly
        SetNewUploadFileForGrantAppID(checkBoxState, keyValue);
    }
}

Функция для вызова хранимой процедуры SQL Server.

    private void SetNewUploadFileForGrantAppID(int pIntRecordKeyValue, int pIntCheckBoxStatus)
    {
        SqlConnection connection = new SqlConnection(cs.DBcon);

        try
        {
            SqlCommand sqlCommand = connection.CreateCommand();
            sqlCommand.CommandText = "dbo.usp_SetRecordCheckStatus";
            sqlCommand.CommandType = CommandType.StoredProcedure;

            sqlCommand.Parameters.AddWithValue("@pIntRecordKeyValue", pIntRecordKeyValue);
            sqlCommand.Parameters.AddWithValue("@pIntCheckBoxStatus", pIntCheckBoxStatus);
            connection.Open();
            sqlCommand.ExecuteScalar();
        }
        catch (Exception ex)
        {
            //LogError(ex);
        }
        finally
        {
            connection.Close();
            connection.Dispose();
        }
    }

Шаг 3

Создать Хранимая процедура SQL Server для сохранения изменений

Например.

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[usp_SetRecordCheckStatus]
    @pIntRecordKeyValue INT,
    @pIntCheckBoxStatus INT
AS
BEGIN
    SET NOCOUNT ON;

    UPDATE dbo.Record
        SET CheckState = @pIntCheckBoxStatus
        WHERE Pno = @pIntCheckBoxStatus
END
GO
...