Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

rafaelsouzab

Desmarcar checkbox no gridview ao marcar um checkbox.

Recommended Posts

Olá,

 

Estou tentando de algumas formas porem não estou chegando no resultado adequado, tenho um gridview que a primeira coluna é do tipo checkbox para poder "selecionar" a linha....

eu gostaria que o usuário pudesse selecionar apenas 1 checkbox dentro desse grid view ou que fosse desmarcado os checkbox que estivessem marcados.


Alguma sugestão...

 

A base para percorrer o grid view seria esta....

 

porem não sei em qual evento colocar ou de que forma usar para chegar no resultado esperado...

 

 

foreach (GridViewRow row in gvUsuarios.Rows)
            {
                if (row.RowType == DataControlRowType.DataRow)
                {
                    CheckBox chkRow = (row.Cells[0].FindControl("chkUser") as CheckBox);
                    if (chkRow.Checked)
                    {
                       
                       
                    }
                }
            }

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode usar o CheckedChanged quando o usuário clicar no checkbox e assim verificar os demais valores:

 

<asp:TemplateField HeaderText="View">
  <ItemTemplate>
    <asp:CheckBox ID="chkview" runat="server" AutoPostBack="true" OnCheckedChanged="chkview_CheckedChanged" /> 
  </ItemTemplate>
</asp:TemplateField>

 

protected void chkview_CheckedChanged(object sender, EventArgs e) { 
  GridViewRow row = ((GridViewRow)((CheckBox)sender).NamingContainer); 
  int index = row.RowIndex; 
  CheckBox cb1 = (CheckBox)Gridview.Rows[index].FindControl("chkview"); 
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Certo mas como vou desmarcar os checkbox que estavam marcados ao marcar um chkbox,

Pensei em uma logica,  toda vez que um checkbox for marcado eu gravo o index dele,  ou  a linha dele,  ai eu desmarco todos os checkbox e marco o checkbox que eu marquei o index ou a linha, como isso poderia ser feito....

Compartilhar este post


Link para o post
Compartilhar em outros sites

fiz dessa forma e deu certo, faltou também colocar AutoPostBack="True"  poderia me passar uma breve explicação sobre isso, migrei de windows form pra asp.net agora e são muitas duvidas... inclusive sobre PostBack parece ser simples mas não consegui entender muito bem ainda.

 

int index = 0;


            foreach (GridViewRow rows in gvUsuarios.Rows)
            {
                if (rows.RowType == DataControlRowType.DataRow)
                {
                    CheckBox chkRow = (rows.Cells[0].FindControl("chkUser") as CheckBox);

                    if (chkRow.Checked)
                    {
                        GridViewRow row = ((GridViewRow)((CheckBox)sender).NamingContainer);
                        index = row.RowIndex;

                    }
                }
            }


            foreach (GridViewRow rows in gvUsuarios.Rows)
            {
                if (rows.RowType == DataControlRowType.DataRow)
                {
                    for (int i = 0; i < rows.Cells.Count; i++)
                    {
                        
                        CheckBox chkRow = (rows.Cells[i].FindControl("chkUser") as CheckBox);
                        if (chkRow.Checked == true)
                        {
                            if (rows.RowIndex != index)
                            {
                            
                                chkRow.Checked = false;

                            }
                        }
                    }

                }
            }

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Existem 2 camadas:

  1. Cliente -> onde está o asp.net e seu html
  2. Servidor -> onde está o código c#

Quando se trabalha apenas com o asp.net na camada cliente (quando não esta usando angular, react, jquery, etc...) é necessário dar um "refresh" na página para que a comunicação entre cliente e sevidor aconteça. Quando você marca o AutoPostBack = true isso significa que qualquer mudança de valor nesse controle ele vai submeter a página novamente para o servidor para buscar mais informações.

 

Aqui tem uma explicação mais didática: https://www.devmedia.com.br/desvendando-asp-net-postback/29197

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara me ajudou muito mesmo, muito obrigado.

 

 

Então esse trecho de código por uma breve explicação que vi no site da MS, se a pagina estiver sendo carregada pela primeira vez essa condição será verdadeira, se acontecer um post back ao clicar em um botão na parte cliente, esse código não sera executado. estou certo sobre isso ? 

if(!isPostBack)
{
  //executa validação ou alterações
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por Caio Henrique Bottigelli
      Olá, estou desenvolvendo um sistema em asp.net Framework MVC, usando o banco de dados Postgresql. Quando 2 usuários diferentes usam o sistema acontece conflito de informações, por exemplo, no cadastro de clientes, preciso vincular uma pessoa a um determinado cliente, caso 2 usuários estiverem usando, e os 2 fizerem essa ação de vincular pessoas a um cliente, no 2º usuário vai aparecer a pessoa que o 1º usuário vinculou. É como se o sistema estivesse usando uma única Lista e os 2 usuários estivessem compartilhando essa lista.
      As variáveis de conexão não estão estáticas, toda vez que alguém entrar no sistema, vai ser criado uma nova instancia de conexão.
      Alguém sabe como resolver esse conflito de informação entre usuários?
    • Por luizpaps
      Boa tarde, tenho um winform com tabcontrol e 2 tabpages, na tabpage1 tenho um combobox vinculado ao banco MySql, quando seleciono um registro no combobox ele preenche os textbox da tabpage1 com os dados relativo àquele registro do banco, mas quando clico na tabpage2 para preencher outros textbox adicionais que não dependem do banco e volto para tabpage1, todos os textbox são apagados e o combobox fica desvinculado do banco, sem itens, alguém pode me ajudar a resolver esse problema? o código que uso para carregar o combobox está abaixo:
      public void CarregaComboServidores() { try { if (cn.State == ConnectionState.Closed) cn.Open(); } catch (Exception ex) { MessageBox.Show("Erro ao Carregados dados da Tabela tservidores " + ex.Message + " contate o desenvolvedor", "SysDiárias - Erro de Conexão", MessageBoxButtons.OK, MessageBoxIcon.Error); } finally { string mSQLServidores = "select * from tservidores"; MySqlCommand cmdServidores = new MySqlCommand(mSQLServidores, cn); MySqlDataAdapter mdaServidores = new MySqlDataAdapter(cmdServidores); DataTable dtServidores = new DataTable(); cmbNome.DataSource = null; cmbNome.Items.Clear(); mdaServidores.Fill(dtServidores); cmbNome.DataSource = dtServidores; cmbNome.ValueMember = "idservidor"; cmbNome.DisplayMember = "nome"; cmbNome.SelectedIndex = (-1); cmbNome.Refresh(); if (cn.State == ConnectionState.Open) cn.Close(); } }  
    • Por Querendo_ser_Nerd
      Bom dia , 
       
      Pessoal, realizei diversas pesquisas em Fórum e Artigos, meu caso seria, criei uma aplicação na qual realiza a importação de arquivo em XLS em um DataGridView , está carregando a informação a principio em uma coluna (Duvida as colunas no Excel algumas contem sinais e espaço como "Cód. Cliente" como faço select * from [plan1$] para retornar apenas pela posição da coluna ex. select [A1] from [plan1$] ) , certo , carreguei no DataGrid, creei um botão para carregar as informações do data grid para o BD Oracle, passei toda a configuração conexão e realizei o INSERT , mas não popula com as informações do grid na tabela, apenas quando no INSERT ...Values (1) por exemplo o mesmo inseri o valor na tabela no banco. Já realizei a depuração mas não consigo. Sou novo nessa linguagem. Obg pela Ajuda.
       
      using System; using System.Data; using System.Data.OleDb; // intregração Excel using System.Data.OracleClient; using System.Windows.Forms; namespace WindowsFormsLog {     public partial class Form4 : Form     {                  public Form4()         {             InitializeComponent();         }         private void button1_Click(object sender, EventArgs e)         {             OpenFileDialog openFileDialog = new OpenFileDialog();             if(openFileDialog.ShowDialog()== System.Windows.Forms.DialogResult.OK)             {                 this.textBox1.Text = openFileDialog.FileName;             }         }                 private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)         {                     }         public void button2_Click_1(object sender, EventArgs e)         {              string PathCpnn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + textBox1.Text + ";Extended Properties='Excel 12.0 Xml;HDR=YES;IMEX=1';";             OleDbConnection conn = new OleDbConnection(PathCpnn);             //LINQ c#              OleDbDataAdapter myDbDataAdapter = new OleDbDataAdapter("Select *  from [Plan1$]", conn); // planilha deve conter o nome Plan1             DataTable dt = new DataTable(); // armazena dado               myDbDataAdapter.Fill(dt);               dataGridView1.DataSource = dt;             dataGridView1.Columns[0].HeaderText = "NROPEDCLIENTE"; //alterando nome das colunas             //  dataGridView1.Columns[1].HeaderText = "DTAINCLUSAO";                  }             private void Form4_Load(object sender, EventArgs e)         {         }         public void button3_Click(object sender, EventArgs e)         {             string OracleConn = @"Data Source = ok; User ID =ok ; Password = ok; Unicode = True";             OracleConnection conexao = new OracleConnection(OracleConn);                          try             {                                if (dataGridView1.Rows.Count > 1)                 {                     for (int i = 1; i <= dataGridView1.Rows.Count ; i++)//-1                     {                         int dataGridView1 = Convert.ToInt32(this.dataGridView1.Rows[i].Cells[0].Value);                         conexao.Open();                         OracleCommand comando = new OracleCommand ("insert into pedido values(@NROPEDCLIENTE)", conexao);                           comando.Parameters.AddWithValue("NROPEDCLIENTE", dataGridView1);                                             comando.ExecuteNonQuery();                         MessageBox.Show("Insert");                         conexao.Close();                     }                 }             }             catch (Exception)             {                 MessageBox.Show("Erro ao inserir"); // Sempre finaliza aqui depuração             }                      }                }     }
          
    • Por JhoniWillian
      Boa Tarde Galera,
       
      Estou com um problema ao converter um campo varchar criado no SQL Server ao consultar via Query dentro do c#.
       
      Se eu pego a query:
       
      SELECT IndProd1 as OP, Lx_Item as Item, Lx_Operacao as Operacao, DataLimite, Lx_LinhaReceita as Cliente, OpProgramada As OpProgramada FROM Production WHERE Lx_Operacao = '00025' AND Lx_CodEtapa = 'P' AND Lx_LinhaReceita = 'CATERPILLAR' AND CONVERT(DATETIME,DataLimite) = '01/12/2017' AND CONVERT(DATETIME,DataLimite) = '30/01/2018' //+ "AND DataLimite = '30/01/2018' " AND (DataLimite <> '---') AND DataLimite IS NOT NULL AND Inativo<>'E' AND PlanQty>(QtyPeca+QtySucata) ORDER BY startptrcol DESC,PlanDateEnd, Lx_Pedido, IndProd1, Indprod3 e jogo dentro do Banco SQL Server, ele me trás os resultados, nesse exemplo ai, esta me trazendo 5 linhas de resultados. Porém, quando faço via query dentro do c# para preencher um DataGrid, ele está dando esse erro: Additional information: The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.
       
      OBS: Se em vez de colocar a sequencia de datas eu colocar somente o 'AND DataLimite = '30/01/2018' ele me trás o resultado, porém, somente do dia do filtro e precisava que fosse entre esse intervalo.
       
      O que posso estar errando galera? a query dentro do c# ta assim:
       
      string strSql = "SELECT IndProd1 as OP, Lx_Item as Item, Lx_Operacao as Operacao, DataLimite, Lx_LinhaReceita as Cliente, OpProgramada As OpProgramada FROM Production " + "WHERE Lx_Operacao = '00025' " + "AND Lx_CodEtapa = 'P' " + "AND Lx_LinhaReceita = 'CATERPILLAR' " + "AND CONVERT(DATETIME,DataLimite) = '29/01/2018' " + "AND CONVERT(DATETIME,DataLimite) = '30/01/2018' " //+ "AND DataLimite = '30/01/2018' " + "AND (DataLimite <> '---') " + "AND DataLimite IS NOT NULL " + "AND Inativo<>'E' " + "AND PlanQty>(QtyPeca+QtySucata) " + "ORDER BY startptrcol DESC,PlanDateEnd, Lx_Pedido, IndProd1, Indprod3;"; //cria o objeto command para executar a instruçao sql OleDbCommand cmd = new OleDbCommand(strSql, conn_mes); //define o tipo do comando cmd.CommandType = CommandType.Text; //cria um dataadapter OleDbDataAdapter da = new OleDbDataAdapter(cmd); //cria um objeto datatable DataTable ops = new DataTable(); //preenche o datatable via dataadapter da.Fill(ops); //atribui o datatable ao datagridview para exibir o resultado dvgOpProgramada.DataSource = ops;  
    • Por Erlen Fiuza
      Olá pessoa.
       
      Faz 2 dias que estou tentando conectar um app C# android e um banco sqlite. Já vi um monte de tutorial na internet, mas não funciona. Quando baixo os pacotes pelo NuGet eles vem diferentes (possivelmente atualizados) daí não consigo fazer funcionar. Coloco o endereço do banco e nada. Retorna uma exceção que não consegue conectar no banco, mas já confirmei o endereço até na documentação e nada. Parece macumba hehehe!
       
       
      using Android.App; using Android.OS; using Mono.Data.Sqlite; using System; namespace AppAndroidSqlite {     [Activity(Label = "AppAndroidSqlite", MainLauncher = true)]     public class MainActivity : Activity     {         AlertDialog.Builder alerta;         private string strConn = "URI=file:teste.db";         protected override void OnCreate(Bundle savedInstanceState)         {             alerta = new AlertDialog.Builder(this);             base.OnCreate(savedInstanceState);             // Set our view from the "main" layout resource             SetContentView(Resource.Layout.Main);             try             {                 string insSQL = "select * from Alunos ORDER BY nome ASC";                                 SqliteConnection conn = new SqliteConnection(strConn);                 //SqliteCommand comando = new SqliteCommand(insSQL, conn);                 conn.Open();                 alerta.SetMessage("Conectou!");                 alerta.Show();             }             catch (Exception e) {                 alerta.SetMessage(e.Message);                 alerta.Show();             }                     }     } }  
        PS: 1- o arquivo do banco de dados está em: AppAndroidSqlite\AppAndroidSqlite\bin\Debug\ 2- estou fazendo a depuração direto no celular.  
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.