.net之 datagrid

  (自己参加的这个项目中)数据绑定控件除了上节的repeater,另一个常用的就是datagrid了.预实现效果:

 

 一:用到的几个属性,概述.

(1)AutoGenerateColumns(是否自动生成列):默认情况下,属性被设置为 true,为数据源中的每一个字段创建一个列(BoundColumn)对象.列显示顺序与每一字段在数据源中出现的顺序一样。 通常情况下,将其设为false,而只选择你要显示的列,将其包含在<columns></columns>标记之间列,显示顺序与添加顺序一致。

(2)AlternatingItemStyle(交替项样式) :指定 控件中交替项的样式,为了美观,常把相邻两行定义为不同的样式.

(3)ItemStyle(项样式):指定控件中项的样式。

(4)HeaderStyle(头样式): 指定控件中页眉部分的样式。

(5)PagerStyle:指定控件中页选择部分的样式,可用于对所绑定数据分页,

(6)Columns:列集合,当自动生成列设为false时,添加自定义列.

(7)BoundColumn:显示绑定到数据源中的字段的列。它以文本形式显示字段中的每个项。这是 DataGrid 控件的默认列类型。

(8)TemplateColumn:按照指定的模板显示列中的各项。这使您可以在列中提供自定义控件。

(9)DataField:指定所绑定数据源对应的列名称

(10)HeaderText:指定头部显示名称

(11)Wrap:是否换行

(12)HorizontalAlign:水平停靠位置

二:datagrid用到的事件概述:

(1)先调用ItemCreated创建每一项,然后调用ItemDataBound绑定每一项数据,当点击一行时会调用Itemcommand事件.

所以若要对每一行中的空间添加属性,则应在ItemCreated中,若与所绑定的数据有关则在ItemDataBound中,为每一行的某些项添加CommandName则可以再ItemCommand中获取对应事件.

代码如下:

.aspx中代码:

ExpandedBlockStart.gif 代码
                 < asp:datagrid id = " DGItem "  runat = " server "  Width = " 100% "  PageSize = " 40 "  AutoGenerateColumns = " False "
                            CssClass
= " DataGrid "  AllowPaging = " True " >
                            
< AlternatingItemStyle CssClass = " DataGridAlter " ></ AlternatingItemStyle >
                            
< ItemStyle CssClass = " DataGridItem " ></ ItemStyle >
                            
< HeaderStyle Wrap = " False "  CssClass = " DataGridHeader " ></ HeaderStyle >
                            
< PagerStyle Visible = " False " ></ PagerStyle >
                            
< Columns >
                                
< asp:BoundColumn Visible = " False "  DataField = " newsId "  HeaderText = " newsId " >
                                    
< HeaderStyle Wrap = " False " ></ HeaderStyle >
                                
</ asp:BoundColumn >
                                
< asp:TemplateColumn HeaderText = " 选择 " >
                                    
< HeaderStyle Wrap = " False "  HorizontalAlign = " Center "  Width = " 50px "  VerticalAlign = " Middle " ></ HeaderStyle >
                                    
< ItemStyle HorizontalAlign = " Center "  VerticalAlign = " Middle " ></ ItemStyle >
                                    
< HeaderTemplate >
                                        
< asp:checkbox id = " chkAll "  runat = " server "  Text = " 删除 " ></ asp:checkbox >
                                    
</ HeaderTemplate >
                                    
< ItemTemplate >
                                        
< asp:checkbox id = " chkSingle "  runat = " server " ></ asp:checkbox >
                                    
</ ItemTemplate >
                                
</ asp:TemplateColumn >
                                
< asp:BoundColumn DataField = " newsTitle "  HeaderText = " 名称 " >
                                    
< HeaderStyle Wrap = " False " ></ HeaderStyle >
                                
</ asp:BoundColumn >
                                
< asp:BoundColumn DataField = " keywords "  HeaderText = " 关键字 " >
                                    
< HeaderStyle Wrap = " False " ></ HeaderStyle >
                                
</ asp:BoundColumn >
                                
< asp:TemplateColumn HeaderText = " 来源 " >
                                    
< ItemTemplate >
                                        
< asp:Label id = " Label1 "  runat = " server "  Text = " dd " ></ asp:Label >
                                    
</ ItemTemplate >
                                
</ asp:TemplateColumn >
                                
< asp:BoundColumn DataField = " inDate "  HeaderText = " 添加日期 "  DataFormatString = " {0:yyyy-MM-dd} " >
                                    
< HeaderStyle Wrap = " False "  Width = " 70px " ></ HeaderStyle >
                                    
< ItemStyle HorizontalAlign = " Center " ></ ItemStyle >
                                
</ asp:BoundColumn >
                                
< asp:BoundColumn DataField = " editDate "  HeaderText = " 修改日期 "  DataFormatString = " {0:yyyy-MM-dd} " >
                                    
< HeaderStyle Wrap = " False "  Width = " 70px " ></ HeaderStyle >
                                    
< ItemStyle HorizontalAlign = " Center " ></ ItemStyle >
                                
</ asp:BoundColumn >
                                
< asp:BoundColumn DataField = " hits "  HeaderText = " 点击率 " >
                                    
< HeaderStyle Wrap = " False "  Width = " 40px " ></ HeaderStyle >
                                    
< ItemStyle Wrap = " False "  HorizontalAlign = " Center " ></ ItemStyle >
                                
</ asp:BoundColumn >
                                
< asp:BoundColumn DataField = " orderNo "  HeaderText = " 序号 " >
                                    
< HeaderStyle Wrap = " False "  Width = " 40px " ></ HeaderStyle >
                                    
< ItemStyle Wrap = " False "  HorizontalAlign = " Center " ></ ItemStyle >
                                
</ asp:BoundColumn >
                                
< asp:TemplateColumn HeaderText = " 审核 " >
                                    
< HeaderStyle Wrap = " False "  Width = " 55px " ></ HeaderStyle >
                                    
< ItemStyle HorizontalAlign = " Center " ></ ItemStyle >
                                    
< ItemTemplate >
                                        
< asp:CheckBox id = cbIsPass runat = " server "  Text = " 通过 "  OnCheckedChanged = " CheckBox_CheckedChanged "  AutoPostBack = " True "  Checked = ' <%# DataBinder.Eval(Container, "DataItem.isPass") %> '   >
                                        
</ asp:CheckBox >
                                    
</ ItemTemplate >
                                
</ asp:TemplateColumn >
                                
< asp:TemplateColumn HeaderText = " 设置 " >
                                    
< HeaderStyle Wrap = " False "  Width = " 120px " ></ HeaderStyle >
                                    
< ItemStyle HorizontalAlign = " Center " ></ ItemStyle >
                                    
< ItemTemplate >
                                        
< cc1:userlinkbutton id = " btnCommand "  runat = " server "  ToolTip = " 推荐本新闻 "  CommandName = " command " > [我要推荐] </ cc1:userlinkbutton >& nbsp; & nbsp;
                                        
< cc1:userlinkbutton id = " btnRemark "  runat = " server "  ToolTip = " 管理评论 "  CommandName = " remark " > [评论] </ cc1:userlinkbutton >& nbsp; & nbsp;
                                        
< cc1:userimagebutton id = " imgButtonEdit "  runat = " server "  ToolTip = " 修改 "  CommandName = " Edit "  ImageAlign = " AbsMiddle "
                                            ImageUrl
= " ../Images/edit.gif " ></ cc1:userimagebutton >
                                    
</ ItemTemplate >
                                
</ asp:TemplateColumn >
                                
< asp:BoundColumn Visible = " False "  DataField = " isPic "  HeaderText = " isPic " ></ asp:BoundColumn >
                                
< asp:BoundColumn Visible = " False "  DataField = " picUrl "  HeaderText = " picUrl " ></ asp:BoundColumn >
                                
< asp:BoundColumn Visible = " False "  DataField = " isCommand "  HeaderText = " isCommand " ></ asp:BoundColumn >
                            
</ Columns >
                        
</ asp:datagrid >

aspx.cs中代码:

在ItemCreated中为每一行的checkbox添加点击事件(调用js)

ExpandedBlockStart.gif 代码
         ///   <summary>
        
///  创建datagrid时,,为checkbox添加js事件
        
///   </summary>
        
///   <param name="sender"></param>
        
///   <param name="e"></param>
         private   void  DGItem_ItemCreated( object  sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
        {
            
if (e.Item.ItemType  ==  ListItemType.Header)
            {
                ((CheckBox)e.Item.Cells[
1 ].FindControl( " chkAll " )).Attributes.Add( " onclick " , " CheckAll(' "   +   this .DGItem.ClientID.ToString()  +   " ','chkAll','chkSingle'); " );
            }    
            
if (e.Item.ItemType  ==  ListItemType.AlternatingItem  ||  e.Item.ItemType  ==  ListItemType.Item)
            {
                ((CheckBox)e.Item.Cells[
1 ].FindControl( " chkSingle " )).Attributes.Add( " onclick " , " CheckSingle(' "   +   this .DGItem.ClientID.ToString()  +   " ','chkAll','chkSingle'); " );
            }
            
        }

在ItemDataBound中为需要根据数据源显示的项进行判断(如若对应新闻项目已推荐,则显示取消推荐,否则显示我要推荐)

ExpandedBlockStart.gif 代码
         ///   <summary>
        
///  绑定数据时调用事件,设置是否推荐
        
///   </summary>
        
///   <param name="sender"></param>
        
///   <param name="e"></param>
         private   void  DGItem_ItemDataBound( object  sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
        {
            
if (e.Item.ItemType  ==  ListItemType.AlternatingItem  ||  e.Item.ItemType  ==  ListItemType.Item)
            {
                
bool  command  =  System.Boolean.Parse(e.Item.Cells[ 13 ].Text.ToString());
                
if (command)
                {
                    ((LinkButton) e.Item.FindControl(
" btnCommand " )).Text = " [取消推荐] " ;
                }
                
else
                {
                    ((LinkButton) e.Item.FindControl(
" btnCommand " )).Text = " [我要推荐] "  ;
                }
            }
        }

根据aspx中设置的CommanName在ItemCommand事件中判断下一步的操作(推荐,评论还是修改?)

ExpandedBlockStart.gif 代码
         ///   <summary>
        
///  检测(评论,推荐,编辑事件 )
        
///   </summary>
        
///   <param name="source"></param>
        
///   <param name="e"></param>
         private   void  DGItem_ItemCommand( object  source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
        {
            e.Item.Cells[
0 ].Text.ToString();
            
// this.Response.Write(e.CommandArgument+" name: "+e.CommandName+ e.Item.Cells[0].Text.ToString());    
             string  command  = "" +  e.CommandName;
            
string  strId  =   "" +  e.Item.Cells[ 0 ].Text.ToString();
            
int  newsId  = System.Int32.Parse(strId);
            tNewsFac 
=   new  DevSec.DH.Ums.DH.Fac.DCtNews();
            
if (command.Equals( " command " ))
            {
                
string  str  = ((LinkButton) e.Item.FindControl( " btnCommand " )).Text.ToString() ;
                
if (str.Equals( " [我要推荐] " ))
                {
                
                    
// 如果设为推荐
                    tNewsFac.SetCommand(newsId, 1 );
                    ((LinkButton) e.Item.FindControl(
" btnCommand " )).Text = " [取消推荐] "  ;
                }
                
else
                {
                    
// 取消推荐
                    tNewsFac.SetCommand(newsId, 0 );
                    ((LinkButton) e.Item.FindControl(
" btnCommand " )).Text = " [我要推荐] "  ;
                }
            }
            
else   if (command.Equals( " remark " ))
            {
                
this .Response.Redirect( " remark.aspx?newsId= " + newsId);
            }
            
else   if (command.Equals( " Edit " ))
            {
                
this .Response.Redirect( " schoolAddEdit.aspx?action=edit&newsId= " + newsId);
            }
        }

也可以为datagrid上的checkbox绑定后台事件(如对于通过列)

aspx中为:

ExpandedBlockStart.gif 代码
                                 < asp:TemplateColumn HeaderText = " 审核 " >
                                    
< HeaderStyle Wrap = " False "  Width = " 55px " ></ HeaderStyle >
                                    
< ItemStyle HorizontalAlign = " Center " ></ ItemStyle >
                                    
< ItemTemplate >
                                        
< asp:CheckBox id = cbIsPass runat = " server "  Text = " 通过 "  OnCheckedChanged = " CheckBox_CheckedChanged "  AutoPostBack = " True "  Checked = ' <%# DataBinder.Eval(Container, "DataItem.isPass") %> '   >
                                        
</ asp:CheckBox >
                                    
</ ItemTemplate >
                                
</ asp:TemplateColumn >

.aspx.cs

ExpandedBlockStart.gif 代码
///   <summary>
        
///  设置是否通过
        
///   </summary>
        
///   <param name="sender"></param>
        
///   <param name="e"></param>
         public   void  CheckBox_CheckedChanged( object  sender, System.EventArgs e)
        {
            
for ( int  index = 0 ;index < this .DGItem.Items.Count;index ++ )
            {
                CheckBox MyCheckBox   
=    (CheckBox)DGItem.Items[index].FindControl( " cbIsPass " );   
                
if (sender.Equals(MyCheckBox))
                {
                    
int     newsId  =  System.Int32.Parse(DGItem.Items[index].Cells[ 0 ].Text.ToString());
                    tNewsFac 
=   new  DevSec.DH.Ums.DH.Fac.DCtNews();
                    tNewsFac.SetPass(newsId);
                }
            }
            
// 绑定数据
             this .bindData( where );
        }

当然还需要定义该控件,且在页面初次调用时绑定数据源(略)

  protected System.Web.UI.WebControls.DataGrid DGItem; 

    this.DGItem.DataSource = dt;
    this.DGItem.DataBind();       
 其中js代码(实现全选以及单选):

ExpandedBlockStart.gif 代码
/*  分页
    参数说明:
    prefix:前缀;chkAll:全选框;chkSingle:单选框ID
    
    使用方法:
    if(e.Item.ItemType == ListItemType.Header)
    {
        ((CheckBox)e.Item.Cells[1].FindControl("chkAll")).Attributes.Add("onclick","CheckAll('" + this.dg.ClientID.ToString() + "','chkAll','chkSingle');");
    }
*/
function  CheckAll(prefix,chkAll,chkSingle)
{
    
var  indexChkAll;
    
if (prefix.length  !=   0 )
    {
        indexChkAll        
=  prefix  +   " __ctl2_ "   +  chkAll;
    }
    
else
    {
        indexChkAll        
=  chkAll;
    }
    
var  objChkAll  =  document.getElementById(indexChkAll);
    
var  tempObj;
    
for ( var  i = 0 ;i < document.forms[ 0 ].elements.length;i ++ )
    {    
        tempObj 
=  document.forms[ 0 ].elements[i];
        
if (tempObj.type  ==   " checkbox "   &&  tempObj.id  !=  indexChkAll  &&  tempObj.id.indexOf(chkSingle)  !=   - 1 )
        {
            tempObj.checked 
=  objChkAll.checked;
        }
    }
}
/*  分页
    参数说明:
    prefix:前缀;chkAll:全选框;chkSingle:单选框ID
    
    使用方法:
    if(e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
    {
        ((CheckBox)e.Item.Cells[1].FindControl("chkSingle")).Attributes.Add("onclick","CheckSingle('" + this.dg.ClientID.ToString() + "','chkAll','chkSingle');");
    }
*/
function  CheckSingle(prefix,chkAll,chkSingle)
{
    
var  indexChkAll;
    
if (prefix.length  !=   0 )
    {
        indexChkAll        
=  prefix  +   " __ctl2_ "   +  chkAll;
    }
    
else
    {
        indexChkAll        
=  chkAll;
    }
    
var  objChkAll  =  document.getElementById(indexChkAll);
    
var  tempObj;
    
var  allCount     =   0 ;
    
var  checkCount     =   0 ;
    
for ( var  i = 0 ;i < document.forms[ 0 ].elements.length;i ++ )
    {    
        tempObj 
=  document.forms[ 0 ].elements[i];
        
if (tempObj.type  ==   " checkbox "   &&  tempObj.id  !=  indexChkAll  &&  tempObj.id.indexOf(chkSingle)  !=   - 1 )
        {
            
if (tempObj.checked)
            {
                checkCount
++ ;
            }
            
else
            {
                objChkAll.checked 
=   false ;
                
// break;
            }
            allCount
++ ;
        }
    }
    
if (checkCount  !=  allCount)
    {
        objChkAll.checked 
=   false ;
    }
    
else
    {
        
if (allCount  !=   0 )
        {
            objChkAll.checked 
=   true ;
        }
    }
}


 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/9421/archive/2009/12/22/1629626.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值