动态控制DataGrid中的TextBox的状态及输入值!!

要实现的功能是:
   1. TextBox "领用数量" 是动态生成的.
   2. 在后台动态控制"领用数量"的状态.
   3. 控制"领用数量"的输入量不能大于"可用数量" .
       如果输入后的"领用数量"会大于"可用数量",则无法输入!!! 
       直接脚本实现,省掉了提交,检查,回传,弹出对话框等等一系列繁琐的工作.

如图:
动态控制DataGrid中的TextBox的状态及输入值!!


前台:
< asp:datagrid  id ="dgXimu"  runat ="server"  DataKeyField ="TID"  OnUpdateCommand ="update"  OnCancelCommand ="cancel"
    OnEditCommand
="edit"  AutoGenerateColumns ="False"  BorderColor ="#CCCCCC"  BorderStyle ="None"  BorderWidth ="1px"  BackColor ="White"  CellPadding ="3"
    Width
="100%"  AllowPaging ="True" >
    
< SelectedItemStyle  Font-Bold ="True"  ForeColor ="#F7F7F7"  BackColor ="#738A9C" ></ SelectedItemStyle >
    
< AlternatingItemStyle  BackColor ="White" ></ AlternatingItemStyle >
    
< ItemStyle  ForeColor ="Black"  BackColor ="White" ></ ItemStyle >
    
< HeaderStyle  Font-Bold ="True"  ForeColor ="#336699"  BackColor ="#E6EEF7" ></ HeaderStyle >
    
< FooterStyle  ForeColor ="#336699"  BackColor ="#E6EEF7" ></ FooterStyle >
    
< Columns >
        
< asp:BoundColumn  DataField ="WhinNo"  ReadOnly ="True"  HeaderText ="入仓单号" >
            
< HeaderStyle  Width ="25%" ></ HeaderStyle >
        
</ asp:BoundColumn >
        
< asp:BoundColumn  DataField ="WhinDate"  ReadOnly ="True"  HeaderText ="入仓时间" >
            
< HeaderStyle  Width ="25%" ></ HeaderStyle >
        
</ asp:BoundColumn >
        
< asp:BoundColumn  DataField ="WareName"  HeaderText ="库别" >
            
< HeaderStyle  Width ="10%" ></ HeaderStyle >
        
</ asp:BoundColumn >
        
< asp:BoundColumn  DataField ="QtyKy"  HeaderText ="可用数量" >
            
< HeaderStyle  Width ="15%" ></ HeaderStyle >
        
</ asp:BoundColumn >
        
< asp:BoundColumn  HeaderText ="领用数量" >
            
< HeaderStyle  Width ="10%" ></ HeaderStyle >
        
</ asp:BoundColumn >
    
</ Columns >
</ asp:datagrid >


添加一段Javascript:
< script language = " javascript " >
    
function  isInt(obj,strQtyKy)
    {
        
if (event.keyCode < 48   ||  event.keyCode > 57 )
        {
            event.keyCode
= 0 ;
        }
        
else
        {
            
// 原来的领用数量
             var  QtyLyOld
            
if (obj.value == "" )
                QtyLyOld 
=   0 ;
            
else
                QtyLyOld 
=  obj.value;
            
            
// 按下的数量
             var  QtyLyNew
                QtyLyNew 
=  parseInt(event.keyCode) - 48 ;

            
if ((QtyLyOld  +  QtyLyNew)  >  parseInt(strQtyKy))
            {
                event.keyCode
= 0 ;
            }            
        }                
    }                    
</ script >


后台:
private   void  dgXimu_ItemDataBound( object  sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
    
try
    {
        OASys.Public.Public objPub
= new  OASys.Public.Public();
        
for ( int  i = 0 ; i  <  dgXimu.Items.Count; i ++ )
        {
            
// 主键列
             string  strTID  =  dgXimu.DataKeys[i].ToString();

            
// 可用数量列
            TableCell cellQtyKy  =  dgXimu.Items[i].Cells[ 4 ];
            
string  strQtyKy  =  cellQtyKy.Text;

            
// 领用数量列
            TableCell cellQtyLy     =  dgXimu.Items[i].Cells[ 5 ];
            cellQtyLy.Controls.Clear();
        
            
// 领用数量列 - 控制ReadOnly
            TextBox tb   =   new  TextBox();
            tb.CssClass 
=   " input_text " ;
            tb.Width 
=   80 ;
            tb.MaxLength 
=   10 ;
            tb.EnableViewState 
=   true ;
            tb.Attributes.Add(
" onkeypress " , @" isInt(this, " +  strQtyKy  + " ) " );
            cellQtyLy.Controls.Add(tb);
        }
        objPub.Close();            
    }
    
catch (Exception ex)
    {
        
throw  ex;
    }
}

你可能感兴趣的:(datagrid)