2009-01-20 7 views
2

J'ai une colonne de case à cocher sur ma grille dans une application Windows. Je veux un événement dès que quelqu'un clique sur la case à cocher.Événement pour checkbox sur gridview?

Comment faire?

+1

il n'y a pas de GridView dans l'application Windows, il y a un DataGridView;) - GridView est un contrôle web. – balexandre

Répondre

2

Nouvelle réponse, parce que maintenant je sais qu'il est Windows Form

Tout d'abord, vous devez définir la ligne pour être modifiable pour l'utilisateur clique dans la chekbox, pour éviter que vous puissiez voir quand le client clique dans la CELLULE d'une rangée.

Disons que la première cellule est la case à cocher:

et la deuxième texte ...

mon code pour Form1.cs

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

    private void Form1_Load(object sender, EventArgs e) 
    { 
     dgv.DataSource = new testData[] { 
      new testData{ CheckBox = true, Name = "One" }, 
      new testData{ CheckBox = true, Name = "Two" }, 
      new testData{ CheckBox = false, Name = "Three" }, 
      new testData{ CheckBox = false, Name = "Four" }    
     }; 
    } 

    private void dgv_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e) 
    { 
     if (e.ColumnIndex == 0) // It's the Checkbox Column 
     { 
      DataGridViewRow dgvr = dgv.Rows[e.RowIndex]; 
      MessageBox.Show(String.Format("Row {0} was cliked ({1})", (e.RowIndex + 1).ToString(), 
       dgvr.Cells[1].Value)); 
     } 
    } 
} 

public class testData 
{ 
    public Boolean CheckBox { get; set; } 
    public String Name { get; set; } 
} 

la conception ... il suffit de glisser un composant DataGridView dans le formulaire de fenêtre, nommé dgv et dans les événements, double-cliquez sur l'événement CellMouseClick

2

Voici un exemple:

<%@ Page Language="C#" AutoEventWireup="true" %> 

<script runat="server"> 
    public class Item 
    { 
     public string Name { get; set; } 
     public bool Checked { get; set; } 
    } 

    protected void Changed(object sender, EventArgs e) 
    { 
     CheckBox checkBox = sender as CheckBox; 
     Response.Write(checkBox.Checked.ToString()); 
    } 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      grid.DataSource = new[] 
      { 
       new Item() { Name="1", Checked = true }, 
       new Item() { Name="2", Checked = false } 
      }; 
      grid.DataBind(); 
     } 
    } 
</script> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" > 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <asp:GridView ID="grid" runat="server" AutoGenerateColumns="false"> 
      <Columns> 
       <asp:TemplateField> 
        <ItemTemplate> 
         <%# Eval("Name") %> 
        </ItemTemplate> 
       </asp:TemplateField> 
       <asp:TemplateField> 
        <ItemTemplate> 
         <asp:CheckBox ID="check" runat="server" Checked='<%# Eval("Checked") %>' OnCheckedChanged="Changed" AutoPostBack="true" /> 
        </ItemTemplate> 
       </asp:TemplateField> 
      </Columns> 
     </asp:GridView> 
    </div> 
    </form> 
</body> 
</html> 
+0

C'est une bonne pratique de vérifier vs null après cela. CheckBox checkBox = expéditeur comme CheckBox; if (checkBox = null) return; ou utiliser la distribution directe puis CheckBox checkBox = (CheckBox) expéditeur; Sinon, vous allez former une mauvaise habitude pour les nouveaux développeurs;) Bienvenue au club nitpickers: D ... –

+0

Merci darin, mais j'avais besoin de la solution pour les formes de fenêtres. – nullDev

+0

bext time nullDev, ajoutez windowsform dans le tag de votre question pour que tous puissent le savoir :) – balexandre

Questions connexes