Xming's .Net Sky

.Net Live
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

DataGrid 中CheckBox全选及其操作

Posted on 2007-08-22 10:23  jatje王  阅读(806)  评论(0)    收藏  举报
在DataGrid中做了个CheckBox控件组全选,以及能针对具休CheckBox进行操作的应用.
1.在DataGrid中添加模板列(可手工HTML也可属性生成器)
2.在模板中添加CheckBox(CB)控件,在HeaderTemplate中加入一CB(这里取ID为cb,在ItemTemplate中加入CB,
    此CB将作为DG的一组 CB(这里置ID为cbOp).
    此处须将cb的AutoPostBack属性设为True,并为OnCheckChanged事件指定一函数( 不知此指定可否在隐藏代码文件中做),这里为SelectAll().
 做完以上后,前端显示文件如下:
 1<asp:datagrid id="dgPl" style="Z-INDEX: 101; LEFT: 24px; POSITION: absolute; TOP: 48px" runat="server"
 2  ForeColor="Black" GridLines="Vertical" CellPadding="3" BackColor="White" BorderWidth="1px"
 3  BorderColor="#999999" AllowPaging="True" AutoGenerateColumns="False" Height="256px" Width="816px"
 4  Font-Size="Smaller" BorderStyle="Solid">
 5 <SelectedItemStyle Font-Bold="True" ForeColor="White" BackColor="#000099"></SelectedItemStyle>
 6 <AlternatingItemStyle BackColor="#CCCCCC"></AlternatingItemStyle>
 7 <HeaderStyle Font-Size="Smaller" Font-Bold="True" ForeColor="White" BackColor="Black"></HeaderStyle>
 8 <FooterStyle BackColor="#CCCCCC"></FooterStyle>
 9 <Columns>
10  <asp:HyperLinkColumn DataTextField="bookname" HeaderText="评论商品名称"></asp:HyperLinkColumn>
11  <asp:HyperLinkColumn Target="_blank" DataNavigateUrlField="pinglunid" DataNavigateUrlFormatString="pinglun.aspx?id={0}"          DataTextField="pingluntitle" HeaderText="评论标题"></asp:HyperLinkColumn>
12  <asp:BoundColumn DataField="pinglundate" HeaderText="评论时间"></asp:BoundColumn>
13  <asp:TemplateColumn HeaderText="操 作">
14   <HeaderTemplate>
15    <asp:CheckBox id="cb" runat="server" OnCheckedChanged="SelectAll" AutoPostBack="True" Text="全选"></asp:CheckBox>
16   </HeaderTemplate>
17   <ItemTemplate>
18    <asp:CheckBox id="cbOp" runat="server"></asp:CheckBox>
19   </ItemTemplate>
20  </asp:TemplateColumn>
21  <asp:BoundColumn Visible="False" DataField="pinglunid" HeaderText="plid"></asp:BoundColumn>
22 </Columns>
23 <PagerStyle HorizontalAlign="Right" ForeColor="Black" BackColor="#999999" Mode="NumericPages"></PagerStyle>
24</asp:datagrid>
25
26

3.在隐藏代码文件中定义OnCheckedChanged事件函数.
     通过遍历DataGrid中第条记录来实现
     ID为cb的CB,因是单一控件,可以通过cb找到,而ID为cbOp者是一组控件,须DataGrid的FindControl()方法而指定.
     此为dgi.FindControl("cbOp");
 函数如下:

  public void SelectAll(object sender,System.EventArgs e)
  
{
   CheckBox cba 
=
 (CheckBox)sender;
   
if(cba.ID=="cb"
)
   
{
    
foreach(DataGridItem dgi in
 dgPl.Items)
    
{
     CheckBox cbs
=(CheckBox)dgi.FindControl("cbOp"
);
     cbs.Checked
=
cba.Checked;
                }

   }

  }

4.而要操作DataGrid中的记录(如删除),可以通过遍历记录,判断是否Checked来进行,
    几本上同 步骤3
 如下:

 1private void btDel_Click(object sender, System.EventArgs e)
 2  
{
 3

 4   foreach(DataGridItem dgi in
 dgPl.Items)
 5   
{
 6    CheckBox cb = (CheckBox)dgi.FindControl("cbOp"
);
 7    if
(cb.Checked)
 8    
{
 9     int nID = int.Parse(dgi.Cells[4
].Text);
10     scom.CommandText="delete from shop_pinglun where pinglunid=@pPlid"
;
11
     scom.Parameters.Clear();
12     scom.Parameters.Add("@pPlid"
,nID);
13
     scon.Open();
14
     scom.ExecuteNonQuery();
15
     scon.Close();
16
     
17    }

18
19   }

20   dgPl.CurrentPageIndex=0;
21   dgPl_bind(int
.Parse(ddlPl.SelectedItem.Value));
22

23  }

24
25

总结:
       可见,在DataGrid中,要操作组控件,通过FindContro() 与ID属性进行是一种行之有效的方法