我在页面上放入一个DataList控件,加载时在DataSet的表中自动增加一新行,并绑定DataList,对空进行修改,重新绑定显示一行,正确执行.<HeaderTemplate>中放入一个Button,当点Button时,操作DataSet中的表并加入一个空行,然后绑定DataList控件,这时应该是一个有数据的行,和一个空行,但不知道为什么绑定后,DataList显示两行,且都是有数据的,百思不得其解,望高手指点!!!部分代码如下:
public class EquipInDepot : System.Web.UI.Page
{
protected System.Web.UI.HtmlControls.HtmlForm Form1;
protected System.Web.UI.WebControls.DataList DataList1;
protected System.Web.UI.WebControls.Button Button1;
protected System.Web.UI.WebControls.Button next;
protected System.Web.UI.WebControls.TextBox dbBillID;
protected System.Web.UI.WebControls.DropDownList ddlBuyer;
protected System.Web.UI.WebControls.TextBox txtInDepotDate;
protected DAL.ESTD.EQM_InDepotDS eqM_InDepotDS1;private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
Func.WebUI.SetPosition(this);
if(!this.IsPostBack)
{
this.Bind();
}
}

private void Bind()
{
if(Session["Ds"]==null)
{
//向数据集EQM_InDepotDS中的EQM_Equipment表插入一条空记录
DAL.ESTD.EQM_InDepotDS.EQM_EquipmentRow equipRow=this.eqM_InDepotDS1.EQM_Equipment.NewEQM_EquipmentRow();
this.eqM_InDepotDS1.EQM_Equipment.AddEQM_EquipmentRow(equipRow);
}
else
{
eqM_InDepotDS1=(EQM_InDepotDS)Session["Ds"];
}

//对DataList1进行数据绑定(此数据中的数据表只有一条记录)
this.DataList1.DataSource=eqM_InDepotDS1.EQM_Equipment;
this.DataList1.DataBind();//将此数据集放入Session变量中
Session["Ds"]=eqM_InDepotDS1;
}



private void DataList1_ItemCommand(object source, System.Web.UI.WebControls.DataListCommandEventArgs e)
{
eqM_InDepotDS1=(EQM_InDepotDS)Session["Ds"];
EQM_InDepotDS.EQM_EquipmentRow row;switch(e.CommandName)
{
case "add":
EQM_InDepotDS.EQM_EquipmentRow nRow=eqM_InDepotDS1.EQM_Equipment.NewEQM_EquipmentRow();
eqM_InDepotDS1.EQM_Equipment.AddEQM_EquipmentRow(nRow);Session["Ds"]=eqM_InDepotDS1;
this.Bind();
break;case "edit":
    this.DataList1.EditItemIndex=e.Item.ItemIndex;
this.Bind();

break;
case "updata":row=eqM_InDepotDS1.EQM_Equipment.FindByID((Int64)DataList1.DataKeys[e.Item.ItemIndex]); row.Name=WebUI.GetDLText("txtName1",e);
row.TypeNo=WebUI.GetDLText("txtTypeNo1",e);
row.Price=Convert.ToDecimal(WebUI.GetDLText("txtPrice1",e).Trim());
row.Unit=WebUI.GetDLText("ddlUnit1",e);
row.Classify=WebUI.GetDLText("ddlClass1",e);
row.DepreYear=Convert.ToInt32(WebUI.GetDLText("txtDepre1",e).Trim());
row.Country=WebUI.GetDLText("ddlCountry1",e);
row.Purpose=WebUI.GetDLText("ddlPurpose1",e);
row.MoneySource=WebUI.GetDLText("ddlSource1",e);
row.Type=WebUI.GetDLText("ddlType1",e);
row.ProdLicenceNo=WebUI.GetDLText("txtProd1",e);
row.RegCardNo=WebUI.GetDLText("txtReg1",e);
row.SerialNo=WebUI.GetDLText("txtCode1",e);
row.VendorID=WebUI.GetDLText("ddlVendor1",e);
row.Producer=WebUI.GetDLText("txtProducer1",e); Session["Ds"]=eqM_InDepotDS1;
this.DataList1.EditItemIndex=-1;
this.Bind();
break;
case "cancel":
if(e.Item.ItemIndex==0)
{
this.DataList1.EditItemIndex=-1;
this.Bind();
}
else
{
row=
eqM_InDepotDS1.EQM_Equipment.FindByID((long)this.DataList1.DataKeys[e.Item.ItemIndex]);
row.Delete();
Session["Ds"]=eqM_InDepotDS1;
this.DataList1.EditItemIndex=-1;
this.Bind();
}
break;}
}}

解决方案 »

  1.   

    我想:问题是出在数据绑定上,你把IF语句去掉,只要只间的绑定试试
    if(!this.IsPostBack)
    {
    this.Bind();
    }改为:
    this.Bind();
      

  2.   

    是你获取数据的问题。
    如:
    WebUI.GetDLText("ddlClass1",e);
    因为你已经封装了。
    具体的我也不知道什么意思了。
    就比如说吧!
    你修改数据的时候,会初始化数据,
    假如初始化如下:
    TextBox1.Text="test";
    让你更新的时候,你这样获取数据会出现更新不了情况。
    假如:
    row.MoneySource=TextBox1.Text;所以,
    只有这样可以解决Request.Form["TextBox1"];
      

  3.   

    WebUI.GetDLText("ddlClass1",e);
    这个方法,是用来,获得DataList控件中的<EditItemTemplate>里子控件的值,比如TextBox的text值。然后再赋给Row中的字段.