Checbox在GridView中的应用

本文介绍如何使用ASP.NET中的GridView控件实现数据展示、分页、全选与反选等功能,并提供详细的前台与后台代码示例。

先看效果图:

前台代码:样式自己定义哦!

       <div style="text-align: center; width: 80%">
            <yxy:HkrGridView ID="tabGridView1" runat="server" AutoGenerateColumns="False" Width="100%"
                OnRowDataBound="HkrGridView1_RowDataBound" OnRowCreated="HkrGridView1_RowCreated"
                ShowHeader="True" AllowPaging="false" DataKeyNames="keyId" ShowFooter="false">
                <Columns>
                    <asp:BoundField>
                        <ItemStyle HorizontalAlign="Center" Width="5%" />
                    </asp:BoundField>
                    <asp:TemplateField>
                    <ItemTemplate>
                    <a href='<%#DataBinder.Eval(Container.DataItem,"newName")%>' ><%#DataBinder.Eval(Container.DataItem,"oldName")%></a>
                    </ItemTemplate>
                    </asp:TemplateField>
                 <asp:BoundField DataField="memo">
                        <ItemStyle Width="20%" HorizontalAlign="left" />
                    </asp:BoundField>
                    <asp:TemplateField>
                        <ItemTemplate>
                            <asp:CheckBox ID="CheckBox" runat="server" />
                        </ItemTemplate>
                        <ItemStyle HorizontalAlign="Center" Width="5%" />
                    </asp:TemplateField>
                </Columns>
                <FooterStyle ForeColor="Red" HorizontalAlign="Center" Font-Bold="true" />
            </yxy:HkrGridView>
            <div id="DivOne" style="text-align: right">
                <asp:CheckBox ID="CheckBoxAll" runat="server" Text="全选" Width="80px" AutoPostBack="True"
                    OnCheckedChanged="CheckBoxAll_CheckedChanged" />
                <asp:CheckBox ID="CheckBox1" runat="server" Text="反选" Width="80px" AutoPostBack="True"
                    OnCheckedChanged="CheckBox1_CheckedChanged" />
                   
                <asp:Button ID="Button1" runat="server" Text="取 消" CssClass="Button" OnClick="Button1_Click" />
            </div>
        </div>

后台代码:

 protected void HkrGridView1_RowCreated(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.Header)
        {
            TableCellCollection tcHeader = e.Row.Cells;
            tcHeader.Clear();
            //第一行表头
            tcHeader.Add(new TableHeaderCell());
            tcHeader[0].Text = "序号<BR>No.";
    

            tcHeader.Add(new TableHeaderCell());
            tcHeader[1].Text = "附件名称";

            tcHeader.Add(new TableHeaderCell());
            tcHeader[2].Text = "备注";
          
            tcHeader.Add(new TableHeaderCell());
            tcHeader[3].Text = "选择</tr>";
        }
    }
    protected void HkrGridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
         GridViewRow gr = e.Row;
         if (e.Row.RowIndex != -1)
         {
             e.Row.Cells[0].Text = (e.Row.RowIndex + 1).ToString();
         }
    }
   private void  HkrGridViewBind(){
        string strSql = "SELECT  keyId,newName, oldName, localHome,memo FROM  aq_file_up WHERE (relaid = @relaid) AND (fjType = @fjType) AND (usestatus = 1)";
        SqlParameter[] sps = {      
                            new SqlParameter("@relaid",this.hdnRelaId.Value),
                            new SqlParameter("@fjType",this.hdnFjType.Value)
                              };
        DataTable dt = pms.SqlHelper.ExecuteDataTable(CommandType.Text, strSql, sps);
        tabGridView1.DataSource = dt;
        tabGridView1.DataBind();
    }
protected void Button1_Click(object sender, EventArgs e)
   {
        CheckBoxAll.Checked = false; 
        CheckBox1.Checked = false;
        for (int i = 0; i <= tabGridView1.Rows.Count - 1; i++) 
        {
            CheckBox cb = (CheckBox)tabGridView1.Rows[i].FindControl("CheckBox");
            cb.Checked = false; 
        } 

   }
   protected void CheckBox1_CheckedChanged(object sender, EventArgs e)
   {
       for (int i = 0; i <= tabGridView1.Rows.Count - 1; i++) 
        {
            CheckBox cb = (CheckBox)tabGridView1.Rows[i].FindControl("CheckBox");
            if (cb.Checked == false) 
            {
                cb.Checked = true; 
            } 
            else 
            {
                cb.Checked = false; 
            } 
        }
         //CheckBox1.Checked =true; 
        CheckBoxAll.Checked = false;  
   }
   protected void CheckBoxAll_CheckedChanged(object sender, EventArgs e)
   {
       for (int i = 0; i <= tabGridView1.Rows.Count - 1; i++) 
        {
            CheckBox cb = (CheckBox)tabGridView1.Rows[i].FindControl("CheckBox"); 
            if (CheckBoxAll.Checked == true) 
            {
                cb.Checked = true; 
            } 
            else 
            {
                cb.Checked = false; 
            } 
        } 
        CheckBox1.Checked = false; 
   }



<think> 我们正在讨论如何在DataGridView中添加CheckBox列(复选框列),而不是单选框列。根据用户提供的引用[1]和[3],添加复选框列的方法如下: ### 方法步骤: 1. **创建复选框列**:使用`DataGridViewCheckBoxColumn`类创建一个复选框列。 2. **设置列属性**:可以设置列的名称(`Name`)、标题文本(`HeaderText`)、宽度(`Width`)等。 3. **添加到DataGridView**:将创建的列添加到DataGridView的列集合中,可以指定插入位置(如第一列)。 ### 示例代码(C#): ```csharp // 创建复选框列 DataGridViewCheckBoxColumn checkBoxColumn = new DataGridViewCheckBoxColumn(); checkBoxColumn.Name = "CheckBoxColumn"; // 列名称,用于后续引用 checkBoxColumn.HeaderText = "选择"; // 列标题显示文本 checkBoxColumn.Width = 50; // 列宽度 // 可选:设置选中和未选中的值(通常用于数据绑定) checkBoxColumn.TrueValue = "1"; checkBoxColumn.FalseValue = "0"; // 将列添加到DataGridView(此处添加到第一列) dataGridView1.Columns.Insert(0, checkBoxColumn); ``` ### 注意事项: - **列位置**:使用`Insert`方法可以指定列的位置(如0表示第一列)。如果不需要指定位置,也可以使用`Add`方法添加到末尾。 - **数据绑定**:如果DataGridView绑定了数据源,建议在数据源中有一个对应的布尔型字段,这样复选框的状态会自动与数据源同步。 - **事件处理**:如果需要处理复选框的点击事件,可以处理`CellContentClick`事件,并判断点击的列是否为复选框列。 ### 判断复选框是否被选中: 可以通过遍历行,访问该列单元格的`Value`属性(注意:需要先转换为`DataGridViewCheckBoxCell`): ```csharp foreach (DataGridViewRow row in dataGridView1.Rows) { // 确保行不是新行(新行是用于添加新数据的空行) if (!row.IsNewRow) { DataGridViewCheckBoxCell cell = row.Cells["CheckBoxColumn"] as DataGridViewCheckBoxCell; if (cell != null) { // 获取值,注意可能是null,需要处理 bool isChecked = (cell.Value != null && (bool)cell.Value); // 或者使用FormattedValue(更安全) // bool isChecked = (cell.FormattedValue == cell.TrueValue); // 或者根据之前设置的TrueValue和FalseValue判断 // bool isChecked = (cell.Value != null && cell.Value.ToString() == "1"); } } } ``` ### 添加表头全选复选框(参考引用[2]): 如果需要实现类似“全选”的功能,可以在表头添加一个复选框,并处理`CellMouseClick`事件(或`HeaderCellClick`): ```csharp // 在窗体构造函数或加载事件中初始化表头复选框 DataGridViewCheckBoxColumn chkCol = (DataGridViewCheckBoxColumn)dataGridView1.Columns["CheckBoxColumn"]; chkCol.HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter; chkCol.HeaderCell = new DataGridViewColumnHeaderCell(); // 创建表头复选框(需要自定义绘制,这里简化为在HeaderCellClick事件中处理) // 注意:实际实现需要自定义绘制表头,并在点击事件中更改状态 // 处理表头点击事件(这里假设已经添加了事件处理) private void dataGridView1_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e) { // 如果点击的是表头行(行索引为-1)并且是复选框列 if (e.RowIndex == -1 && e.ColumnIndex == checkBoxColumn.Index) { // 切换全选状态 bool currentState = !(dataGridView1.Rows.Cast<DataGridViewRow>() .Where(row => !row.IsNewRow) .All(row => Convert.ToBoolean(row.Cells[checkBoxColumn.Index].Value))); // 设置每一行的复选框状态 foreach (DataGridViewRow row in dataGridView1.Rows) { if (!row.IsNewRow) row.Cells[checkBoxColumn.Index].Value = currentState; } } } ``` > 注意:上述全选功能是简化示例,实际应用中可能需要自定义表头单元格来绘制复选框,并处理其点击事件[^2]。 ### 总结: - 添加复选框列使用`DataGridViewCheckBoxColumn`。 - 可以通过列名访问单元格的`Value`属性来获取选中状态。 - 全选功能需要处理表头点击事件,并更新所有行的复选框状态[^2]。 §§相关问题§§ 1. 如何在DataGridView中实现复选框列的全选功能? 2. DataGridView复选框列如何绑定数据? 3. 如何响应DataGridView复选框的状态变化事件? </think> ### DataGridView 添加 CheckBox 列的方法 #### 1. **创建 CheckBox 列** 使用 `DataGridViewCheckBoxColumn` 类创建复选框列,并设置基本属性: ```csharp // 创建复选框列 DataGridViewCheckBoxColumn checkBoxColumn = new DataGridViewCheckBoxColumn(); checkBoxColumn.Name = "SelectColumn"; // 列标识名 checkBoxColumn.HeaderText = "选择"; // 列标题文本 checkBoxColumn.Width = 60; // 列宽度 checkBoxColumn.TrueValue = true; // 选中时的值 checkBoxColumn.FalseValue = false; // 未选中时的值 ``` #### 2. **添加到 DataGridView** 将列添加到控件中: ```csharp // 添加到列集合(添加到末尾) dataGridView1.Columns.Add(checkBoxColumn); // 或插入到指定位置(如第一列) dataGridView1.Columns.Insert(0, checkBoxColumn); ``` #### 3. **判断选中状态** 遍历行检查复选框是否被选中: ```csharp foreach (DataGridViewRow row in dataGridView1.Rows) { if (!row.IsNewRow) // 排除新建行 { bool isChecked = Convert.ToBoolean( row.Cells["SelectColumn"].Value ); if (isChecked) { // 选中行的处理逻辑 } } } ``` #### 4. **添加表头全选功能**(可选) 实现表头全选/反选: ```csharp // 添加表头复选框 private void AddHeaderCheckbox() { Point headerLocation = dataGridView1.GetCellDisplayRectangle( 0, -1, true).Location; // 获取表头位置 CheckBox headerCheckbox = new CheckBox(); headerCheckbox.Location = new Point( headerLocation.X + 15, headerLocation.Y + 2 ); headerCheckbox.Size = new Size(18, 18); headerCheckbox.Click += HeaderCheckbox_Click; dataGridView1.Controls.Add(headerCheckbox); } // 全选/反选逻辑 private void HeaderCheckbox_Click(object sender, EventArgs e) { CheckBox headerCheckbox = (CheckBox)sender; foreach (DataGridViewRow row in dataGridView1.Rows) { if (!row.IsNewRow) { row.Cells["SelectColumn"].Value = headerCheckbox.Checked; } } } ``` ### 关键说明: 1. **数据绑定** 如果 `DataGridView` 绑定数据源,需确保数据源包含布尔类型字段,列名与 `Name` 属性匹配[^1]。 2. **事件处理** 处理选中状态变化: ```csharp dataGridView1.CellValueChanged += (s, e) => { if (e.ColumnIndex == dataGridView1.Columns["SelectColumn"].Index) { // 处理选中状态变化 } }; ``` 3. **新行处理** 通过 `row.IsNewRow` 排除新建的空行,避免空引用异常[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值