Проконсультируйтесь с DataGridView - PullRequest
0 голосов
/ 09 марта 2020

У меня есть запрос относительно выбранных элементов через CheckBox в DataGridView. Дело в том, что я загружаю свой DataGridView и добавляю флажки. Что происходит, у меня есть TextBox, который помогает фильтровать, когда я нажимаю цифры, чтобы отфильтровать все идет хорошо, но когда я удаляю их, CheckBox меняет положение, и CheckBox отменяется. Я прикрепляю ссылку GIF:

enter image description here

Как вы увидите, CheckBox меняются местами во время фильтрации и отменяются. Кто-нибудь есть идеи, как решить эту проблему?

Я оставляю метод, с помощью которого фильтр:

private void filtrarTitulo(string valor)
        {
            SqlConnection conexion = new SqlConnection();
            conexion.ConnectionString = "chain";
            conexion.Open();
            DataSet ds = new DataSet();
            SqlDataAdapter da = new SqlDataAdapter("SELECT Titulo FROM V_CuetaWeb WHERE Titulo LIKE ('" + valor + "%') ORDER BY Titulo DESC", conexion);
            da.Fill(ds, "Cuotas");
            conexion.Close();
            dtgTitulo.DataSource = ds;
            dtgTitulo.DataMember = "Cuotas";
        }

Где я использую его:

private void txtTitulo_TextChanged(object sender, EventArgs e)
        {
            filtrarTitulo(txtTitulo.Text.ToString().Trim());
        }

Как мне назначить CheckBox DataGridView:

private void Form1_Load(object sender, EventArgs e)
        {
            llenaTitulo();

            DataGridViewCheckBoxColumn chk = new DataGridViewCheckBoxColumn();
            chk.HeaderText = "Seleccione";
            chk.Name = "check";
            dtgTitulo.Columns.Add(chk);
            dtgTitulo.AllowUserToAddRows = false;
        }

И в качестве заряда DataGridView:

public void llenaTitulo()
        {
            try
            {
                string conn = "chain";
                using (SqlConnection conexion = new SqlConnection(conn))
                {
                    conexion.Open();
                    string query = "SELECT Titulo AS Título FROM V_CuetaWeb GROUP BY Titulo ORDER BY Titulo DESC";
                    SqlCommand sqlCommand = new SqlCommand(query, conexion);
                    SqlDataAdapter da = new SqlDataAdapter(sqlCommand);
                    DataSet ds = new DataSet();
                    da.Fill(ds);
                    dtgTitulo.DataSource = ds.Tables[0];
                    conexion.Close();
                }
            }
            catch (SqlException ex)
            {
                MessageBox.Show("Error: " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

Проблема первая: The ChekcBox are moved

Проблема вторая: CheckBoxes are deselected

Есть предложения?

ОБНОВЛЕНИЕ (я создаю новую форму для подтверждения примеров):

namespace Prueba
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
    }
}

public class Form1 : Form
{
    private DataGridView dataGridView2 = new DataGridView();
    private BindingSource bindingSource1 = new BindingSource();
    private SqlDataAdapter dataAdapter = new SqlDataAdapter();


    // Initialize the form.
    public Form1()
    {
        dataGridView2.Dock = DockStyle.Fill;


        FlowLayoutPanel panel = new FlowLayoutPanel
        {
            Dock = DockStyle.Top,
            AutoSize = true
        };

        Controls.AddRange(new Control[] { dataGridView2, panel });
        Load += new EventHandler(Form1_Load);
        Text = "DataGridView data binding and updating demo";
    }

    private void GetData(string selectCommand)
    {
        try
        {
            string connectionString = "STRING CONNECTION";



            dataAdapter = new SqlDataAdapter(selectCommand, connectionString);

            SqlCommandBuilder commandBuilder = new SqlCommandBuilder(dataAdapter);

            // Populate a new data table and bind it to the BindingSource.
            DataTable table = new DataTable
            {
                Locale = CultureInfo.InvariantCulture
            };
            dataAdapter.Fill(table);
            bindingSource1.DataSource = table;

            // Resize the DataGridView columns to fit the newly loaded content.
            dataGridView2.AutoResizeColumns(
                DataGridViewAutoSizeColumnsMode.AllCellsExceptHeader);
        }
        catch (SqlException)
        {
            MessageBox.Show("Example");
        }
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        DataGridViewCheckBoxColumn chk = new DataGridViewCheckBoxColumn();
        chk.HeaderText = "Seleccione";
        chk.Name = "check";
        dataGridView2.Columns.Add(chk);
        dataGridView2.AllowUserToAddRows = false;
        dataGridView2.DataSource = bindingSource1;

        GetData("select * from V_CuetaWeb");
    }
...