2009-01-20 72 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