2009-01-20 78 views
2

我在Windows应用程序中的gridview上有一个复选框列。只要有人点击复选框,我想要一个事件。gridview上的复选框事件?

我该怎么做?

+1

在Windows应用程序中没有GridView,有一个DataGridView;) - GridView是一个Web控件。 – balexandre 2009-01-21 15:07:52

回答

2

新的答案,因为现在我知道这是Windows窗体

首先,你需要为了设置行可编辑在用户点击chekbox,以避免您可以看到客户端在某行的CELL中单击的时间。

可以说是第一个单元格是复选框:

和第二部分的文字...

我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; } 
} 

设计代码...只是拖一个DataGridView组件放入窗体中,命名为dgv并在事件中双击事件CellMouseClick

2

这里有一个例子:

<%@ 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

这是一个好的做法,在此之后检查vs null。 CheckBox checkBox = sender as CheckBox; if(checkBox = null)return; 或使用直接投射然后 CheckBox checkBox =(CheckBox)sender; 否则你会对新开发者形成坏习惯;) 欢迎来到nitpickers俱乐部:D ... – 2009-01-20 12:53:51