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

Мне нужно, чтобы в DataGridView не было выбрано CheckBox, кнопка Uno и кнопка Var ios отключены. Если выбран один CheckBox, button Uno включен, а button Var ios отключен. И если выбрано более одного CheckBox, button Uno отключен, а button Var ios включен.

Но происходит следующее:

enter image description here

Я использую следующий код:

public Form1()
{
    InitializeComponent();

    btnUno.Enabled = false;
    btnVarios.Enabled = false;
}

Чтобы включить и отключить кнопки:

private void dtgTitulo_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    int contador = 0;
    foreach (DataGridViewRow row in dtgTitulo.Rows)
    {
        if (row.Cells["Seleccione"].Value != null && row.Cells["Seleccione"].Value.Equals(true))//Columna de checks
        {
            contador++;
            if (contador <= 0)
            {
                btnUno.Enabled = false;
                btnVarios.Enabled = false;
            }
            else if (contador == 1)
            {
                btnUno.Enabled = true;
                btnVarios.Enabled = false;
            }
            else
            {
                btnUno.Enabled = false;
                btnVarios.Enabled = true;
            }
        }
    }
}

Может кто-нибудь помочь меня? Любое предложение?

ОБНОВЛЕНИЕ КАК ЗАГРУЗИТЬ ОБЗОР ДАННЫХ С ПРОВЕРКАМИ:

private DataTable Query()
        {
            DataTable datos = new DataTable();
            SqlConnection sqlConn = new SqlConnection("STRING");
            try
            {
                sqlConn.Open();
                string consulta = "SELECT Titulo AS Título FROM V_CuetaWeb GROUP BY titulo ORDER BY titulo DESC";
                SqlCommand sqlCommand = new SqlCommand(consulta, sqlConn);
                SqlDataAdapter da = new SqlDataAdapter(sqlCommand);//este se encarga de inicializar el command
                da.Fill(datos);
                sqlConn.Close();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error: " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            return datos;
        }

I form_Load:

private void Form1_Load(object sender, EventArgs e)
        {
            ds = new DataSet(); 
            ds.Tables.Add(Query());
            ds.Tables[0].Columns.Add("Seleccione", typeof(bool));
            dtgTitulo.DataSource = ds.Tables[0];
        }

Ответы [ 2 ]

2 голосов
/ 17 марта 2020

Попробуйте код ниже:

КАК согласно предложению @ JIMI

private void dtgTitulo_CellMouseUp(object sender, DataGridViewCellEventArgs e)
{
     if (e.ColumnIndex != 1) return; 

     dtgTitulo.CommitEdit(DataGridViewDataErrorContexts.Commit); 

     var contador  = dtgTitulo.Rows.OfType<DataGridViewRow>().Count(r => (r.Cells[1].Value != null) && ((bool)r.Cells[1].Value == true));

     if (contador <= 0)
     {
          btnUno.Enabled = false;
          btnVarios.Enabled = false;
     }
     else
     {
          if (contador == 1)
          {
              btnUno.Enabled = true;
              btnVarios.Enabled = false;
          }
          else
          {
              btnUno.Enabled = false;
              btnVarios.Enabled = true;
          }
     }
}
1 голос
/ 17 марта 2020

после нажатия на флажки они показывают / скрывают галочки, но значение в ячейке не изменяется немедленно. позвоните EndEdit, чтобы применить их.

private void dtgTitulo_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    if (e.ColumnIndex < 0 || dtgTitulo.Columns[e.ColumnIndex].Name != "Seleccione")
        return;
    dtgTitulo.EndEdit();

    int contador = 0;
    foreach (DataGridViewRow row in dtgTitulo.Rows)
    {
        if (Equals(true, row.Cells["Seleccione"].Value))
        {
            contador++;
            if (contador > 1)
                break;
        }
    }

    btnUno.Enabled = contador == 1;
    btnVarios.Enabled = contador > 1;
}

ps обратите внимание на оптимизацию, сделанную во избежание ненужных итераций

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