技巧随记:DataGrid事件的整合

        相信大家都在网站后台管理页面使用DataGrid来进行数据的编辑操作,比如对数据进行删除,编辑,更新,点击等,是不是要点击几次生成相关事件函数?比如,生成:
private void rssDataGrid_CancelCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
        {
            rssDataGrid.EditItemIndex 
= -1;
            BindTheGrid();
        }

        
private void rssDataGrid_DeleteCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
        {
            DataRow dr 
= dt.Tables[ 0] .Rows[ e.Item.ItemIndex + rssDataGrid.PageSize *  ( rssDataGrid.PageCount - 1 ) ];
            dr.Delete();
            BindTheGrid();
        }

        
private void rssDataGrid_EditCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
        {
            rssDataGrid.EditItemIndex 
= e.Item.ItemIndex;
            BindTheGrid();
        }

        
private void rssDataGrid_UpdateCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
        {
            dt.Tables[ 
0 ] .Rows[ e.Item.ItemIndex + rssDataGrid.PageSize * ( rssDataGrid.PageCount - 1 )][ "dname" ] 
                                 
= ( ( TextBox )( e.Item.Cells[ 1 ].Controls [ 0 ] ) ).Text;
            dt.Tables[ 
0 ] .Rows[ e.Item.ItemIndex + rssDataGrid.PageSize *  ( rssDataGrid.PageCount - 1 ) ][ "durl" ] 
                
= ( ( TextBox )( e.Item.FindControl( "urlTextBox" ) ) ).Text;
            dt.Tables[ 
0 ] .Rows[ e.Item.ItemIndex + rssDataGrid.PageSize *  ( rssDataGrid.PageCount - 1 ) ][ "description" ] 
                
= ( ( TextBox )( e.Item.FindControl( "descriptionTxt" ) ) ).Text;
            dt.Tables[ 
0 ] .Rows[ e.Item.ItemIndex + rssDataGrid.PageSize *  ( rssDataGrid.PageCount - 1 ) ][ "dclass" ] 
                
= ( ( DropDownList )e.Item.FindControl( "classDropDownList" ) ).SelectedValue;                
            rssDataGrid.EditItemIndex 
= -1;
            BindTheGrid();            
        }        

这样是不是很麻烦哪,那好直接使用:

private void rssDataGrid_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
        
{
            
switch( e.CommandName )
            
{
                
case "Edit":
                    rssDataGrid.EditItemIndex 
= e.Item.ItemIndex;
                    BindTheGrid();
                    
break;
                
case "Update":
                    dt.Tables[ 
0 ] .Rows[ e.Item.ItemIndex + rssDataGrid.PageSize * ( rssDataGrid.PageCount - 1 )][ "dname" ] 
                        
= ( ( TextBox )( e.Item.Cells[ 1 ].Controls [ 0 ] ) ).Text;
                    dt.Tables[ 
0 ] .Rows[ e.Item.ItemIndex + rssDataGrid.PageSize *  ( rssDataGrid.PageCount - 1 ) ][ "durl" ] 
                        
= ( ( TextBox )( e.Item.FindControl( "urlTextBox" ) ) ).Text;
                    dt.Tables[ 
0 ] .Rows[ e.Item.ItemIndex + rssDataGrid.PageSize *  ( rssDataGrid.PageCount - 1 ) ][ "description" ] 
                        
= ( ( TextBox )( e.Item.FindControl( "descriptionTxt" ) ) ).Text;
                    dt.Tables[ 
0 ] .Rows[ e.Item.ItemIndex + rssDataGrid.PageSize *  ( rssDataGrid.PageCount - 1 ) ][ "dclass" ] 
                        
= ( ( DropDownList )e.Item.FindControl( "classDropDownList" ) ).SelectedValue;                
                    rssDataGrid.EditItemIndex 
= -1;
                    BindTheGrid();
                    
break;
                
case "Cancel":
                    rssDataGrid.EditItemIndex 
= -1;
                    BindTheGrid();
                    
break;
                
case "Delete":
                    DataRow dr 
= dt.Tables[ 0] .Rows[ e.Item.ItemIndex + rssDataGrid.PageSize *  ( rssDataGrid.PageCount - 1 ) ];
                    dr.Delete();
                    BindTheGrid();
                    
break;
            }
    
        }

        你可以看出那个更简单,更直接?

当然下面的几个函数是不能够使用ItemCommand函数的,你看出来什么原因了吗?参数不一样哪。
    private void rssDataGrid_SortCommand(object source, System.Web.UI.WebControls.DataGridSortCommandEventArgs e)
        {
            dt.Tables[ 
0 ].DefaultView.Sort = e.SortExpression;
            BindTheGrid();
        }

        
private void rssDataGrid_SelectedIndexChanged(object sender, System.EventArgs e)
        {
            
        }
        
private void rssDataGrid_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
        {
            rssDataGrid.CurrentPageIndex 
= e.NewPageIndex;
            BindTheGrid();
        }
        
        这些东西不能算是技巧,滥竽充数而已 :)))

posted on 2005-10-06 16:54  yongboy  阅读(1080)  评论(0编辑  收藏  举报

导航