1、添加一年(12条)的记录:
点添加按钮后,自动在webgrid上添加了12条记录(只是显示在控件上,然没有保存进数据库),
代吗如下:
private void bind(WebGrid dg)
{
if(chkadd.Checked ==false)
{
DataSet dstmp=new DataSet();
if(!dstmp.Tables.Contains("webgrid"))
{
dstmp.Tables.Add(sqldst.Tables["webgrid"].Clone());
}
wgridtmp.DataSource=dstmp;
}
dg.DataSource=sqldst;
dg.DataMember ="webgrid";
dg.DataBind();
}
private void add()
{
chkadd.Checked =true;
if(sqldst.Tables["webgrid"].DefaultView.Count >0)
{
Response.Write (msg.MessageBox ("记录不为空,不能添加!"));
}
else
{
string year=System.DateTime.Today.Year .ToString ();
//给sqldst中添加12条默认的记录,以便再进行修改
for(int i=1;i<13;i++)
{
DataRow dr=sqldst.Tables ["webgrid"].NewRow();
dr["period_bh"]=year+i.ToString("D2");
dr["period_start"]=Convert.ToDateTime (year+"-"+i.ToString("D2")+"-"+"01").ToShortDateString();
if(i<12)
{
dr["period_end"]=Convert.ToDateTime (year+"-"+(i+1).ToString("D2")+"-"+"01").AddDays(-1).ToShortDateString();
}
else
{
dr["period_end"]=Convert.ToDateTime (year+"-12-31").ToShortDateString() ;
}
dr["period_chk"]="";
dr["period_chkdate"]=null;
dr["period_chkbz"]=0;
dr["period_qybz"]=0;
dr["period_bz"]="";
dr["period_startbz"]=0;
sqldst.Tables["webgrid"].Rows.Add (dr);
}
// DataSet dsx=(DataSet)wgrid.DataSource;
DataSet dst=(DataSet)wgridtmp.DataSource;
// 将sqldst中刚添加的数据合并到dst(一个结构复制的sqldst),dst为wgridtmp(一个临时的webgrid)的数据源,利用wgridtmp保存数据。
dst.Merge(sqldst.Tables["webgrid"].GetChanges(System.Data.DataRowState.Added),false,System.Data.MissingSchemaAction.Add);
// dst.Merge(dsx.Tables["webgrid"].GetChanges(System.Data.DataRowState.Added),false,System.Data.MissingSchemaAction.Add);
wgridtmp.DataSource=dst;
settoolbar(this.Toolbar1,false);
setwgrid(this.wgrid,"Edit");
// sqldap.Update (sqldst,"webgrid");
}
}
上面的代码只是给sqldst中添加了12条记录,所以要对webgrid进行重新绑定才能显数据显示在webgrid上,当然这时也还没有将数据保存进数据库
因为要在修改后才保存进数据。
2、做相应的修改:
修改只能是对启用标志和终止期间的修改,不过在终止期间改变的同时起始期间也做相应的改变
由于对后台所作的处理只是更新了sqldst中的数据,所以要同时到webgrid的数据在前台进行修改,以达到数据和显示同步
(1)、后台处理:
private void wgrid_UpdateRow(object sender, ISNet.WebUI.WebGrid.RowEventArgs e)
{
this.wgrid.RootTable.Columns[6].EditType=ISNet.WebUI.WebGrid.EditType.Checkbox;
string olddate;
DataSet dsx=(DataSet)wgrid.DataSource;
int j=e.Row.Position;
int k=e.Row.Position;
DataRow dd=dsx.Tables["webgrid"].Rows[j];
string start=dd["period_start"].ToString ();
string end=dd["period_end"].ToString ();
System.TimeSpan ss=Convert.ToDateTime(end).Subtract(Convert.ToDateTime(start)) ;
int qj=Convert.ToInt32 (ss.TotalDays);
//会计期间在20——40天内
if((qj>20)&&(qj<40))
{
DataRow drqybz=dsx.Tables["webgrid"].Rows[j];
if(drqybz["period_qybz"].ToString ()!="False")
{
//设置启用月份
for(int i=0;i<12;i++)
{
DataRow dr=dsx.Tables["webgrid"].Rows[i];
if(i!=j)
{
dr["period_qybz"]=0;
}
else
{
dr["period_qybz"]=1;
}
}
for(int m=0;m<12;m++)
{
DataRow dr1=dsx.Tables["webgrid"].Rows[m];
dr1["period_chk"]="";
dr1["period_chkbz"]=0;
dr1["period_chkdate"]=null;
}
//给启用月份以前的记录添加数据
for(int l=0;l<j;l++)
{
DataRow dr2=dsx.Tables["webgrid"].Rows[l];
dr2["period_chk"]="admin";
dr2["period_chkbz"]=1;
dr2["period_chkdate"]=System.DateTime.Today;
}
}
//一月份是整月
if(j==0)
{
DataRow dr=dsx.Tables ["webgrid"].Rows[0];
string datestart=dr["period_start"].ToString ();
string year=datestart.Substring (0,4);
dr["period_end"]=Convert.ToDateTime (year+"-01-31");
}
else
{
for(int i=0;i<(11-k);i++)
{
DataRow dr1=dsx.Tables ["webgrid"].Rows[j];
DataRow dr2=dsx.Tables ["webgrid"].Rows[j+1];
olddate=dr1["period_end"].ToString ();
//该用的起始期间为上月的终止期间加一天,终止期间为上月终止期间加一个月
dr2["period_start"]=Convert.ToDateTime (olddate).AddDays (1);
dr2["period_end"]=Convert.ToDateTime (olddate).AddMonths (1);
j++;
}
//十二月份是整月
DataRow dr=dsx.Tables ["webgrid"].Rows[11];
string datestart=dr["period_start"].ToString ();
string year=datestart.Substring (0,4);
dr["period_end"]=Convert.ToDateTime(year+"-12-31");
}
}
DataSet dst=(DataSet)wgridtmp.DataSource;
if(chkadd.Checked==true)
{
//添加和添加修改时的处理
dst.Tables["webgrid"].Rows.Clear();
for(int i=0;i<dsx.Tables["webgrid"].Rows.Count;i++)
{
DataRow dr=dsx.Tables["webgrid"].Rows[i];
dst.Tables["webgrid"].Rows.Add(dr.ItemArray );
}
}
else
{
//修改会计期间时的处理
dst.Merge(dsx.Tables["webgrid"].GetChanges(System.Data.DataRowState.Modified),false,System.Data.MissingSchemaAction.Add);
}
wgridtmp.DataSource=dst;
}
2、前台处理:
在webgrid的OnBeforeUpdate();中调用setiperod();
function setiperod()
{
//定义一个webgrid以及行集
var grid = wgGetGridById("wgrid");
var hTbl = grid.GetRootTable().gettbTBElement();
var row =grid.getSelectedObject().getRowElement();
var cell0=wgGetCellByName(row,"period_bh");
var cell1=wgGetCellByName(row,"period_end");
var cell2=wgGetCellByName(row,"period_qybz");
if(hTbl.rows.length>0)
{
var rows = hTbl.rows;
if(cell2.childNodes[0].checked==true)
{
for (var i=0;i<rows.length; i++)
{
if(wgGetCellByName(rows[i],"period_bh").innerText!=cell0.innerText)
{
wgGetCellByName(rows[i],"period_qybz").childNodes[0].checked=false;
}
else
{
wgGetCellByName(rows[i],"period_qybz").childNodes[0].checked=true;
wgGetCellByName(rows[i],"period_qybz").childNodes[0].disabled=false;
}
}
}
var kdate=new Date();
var jDate=new Date();
kdate=strtodate(wgGetCellByName(row,"period_start").innerText);
jdate=strtodate(wgGetCellByName(row,"period_end").innerText);
var bz;
bz=((jdate-kdate)/86400000);
if(bz>20&&bz<40)
{
for (var i=0;i<rows.length; i++)
{
if(wgGetCellByName(rows[i],"period_bh").innerText>cell0.innerText)
{
var startdate=new Date();
var enddate=new Date();
startdate=strtodate(wgGetCellByName(rows[i-1],"period_end").innerText);
startdate.setDate(startdate.getDate()+1);
var tyear;
tyear=startdate.getFullYear();
var startmonth;
var startday;
startmonth=ntostr(startdate.getMonth()+1);
startday=ntostr(startdate.getDate());
wgGetCellByName(rows[i],"period_start").innerText=startdate.getFullYear()+"-"+startmonth+"-"+startday;
//wgGetCellByName(rows[i],"period_start").innerText=startdate.getFullYear()+"-"+(startdate.getMonth()+1)+"-"+(startdate.getDate());
enddate=startdate;
enddate.setMonth(enddate.getMonth()+1);
enddate.setDate(enddate.getDate()-1);
var enmonth;
var endday;
if(i<11)
{
endmonth=ntostr(enddate.getMonth()+1);
endday=ntostr(enddate.getDate());
wgGetCellByName(rows[i],"period_end").innerText=enddate.getFullYear()+"-"+endmonth+"-"+endday;
//wgGetCellByName(rows[i],"period_end").innerText=enddate.getFullYear()+"-"+(enddate.getMonth()+1)+"-"+(enddate.getDate());
}
else
{
wgGetCellByName(rows[i],"period_end").innerText=tyear+"-12-31";
}
}
}
}
else
{
alert("会计期间只能在20--40天内!");
}
}
return true;
}