private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
  
if (!IsPostBack)
{
this.LoadData(id);
}
}
private void LoadData()
{
//省略一部分代码,会从数据库中取值,把一个有关附件的字段的值取出来赋给下面,FU_Fj是附件的字段
    Fj_Manage(row["Fu_fj"].ToString().Trim());//管理附件
}
private void Fj_Manage(string Fj_String)
{
if (Fj_String.Trim()!="")
{
string[] Fj_Array=Fj_String.Trim().Split(",".ToCharArray());
//string fj_str="",zh="";
int i=0;
foreach(string fj_str in Fj_Array)
{
i=i+1;
System.Web.UI.WebControls.HyperLink Link=new System.Web.UI.WebControls.HyperLink();
Link.ID="Link"+ i;
Link.Text="附件"+i;
Link.Target="_blank";  
Link.NavigateUrl=fj_str;
this.Fj_Panel.Controls.Add(Link); System.Web.UI.WebControls.Label Lb=new System.Web.UI.WebControls.Label();
Lb.Text="  ";
this.Fj_Panel.Controls.Add(Lb); LinkButton LDel=new LinkButton();
LDel.ID="LDel"+i.ToString(); 
LDel.Click += new System.EventHandler(LDel_Click);
LDel.CommandArgument=i.ToString(); 
LDel.CommandName=fj_str.Trim();
LDel.Text="删除".Trim()+i;
this.Fj_Panel.Controls.Add(LDel);


Lb=new System.Web.UI.WebControls.Label();
Lb.Text="    ";
this.Fj_Panel.Controls.Add(Lb);
}
}
}
private void LDel_Click(object sender,System.EventArgs e)
{
string typeid=((LinkButton)sender).CommandArgument.ToString();
string typename=((LinkButton)sender).CommandName.ToString();
System.IO.File.Delete(Server.MapPath(typename));
if(typeid=="1")
{
this.Fu_fjTxt.Text=this.Fu_fjTxt.Text.Replace(typename,"");
}
else
{
this.Fu_fjTxt.Text=this.Fu_fjTxt.Text.Replace("," + typename ,"");
}
if(this.Fu_fjTxt.Text==",")
{
this.Fu_fjTxt.Text="";
}
if(this.Fu_fjTxt.Text.Substring(0,1)==",")
{
this.Fu_fjTxt.Text=this.Fu_fjTxt.Text.Remove(0,1); 
}
}
//这段代码的意思就是对上传的附件进行一个管理,显示出来以后对他进行预览和删除,现在不能执行LDel_Click这个语句,我用调试的话是直接到了page_load那儿了

解决方案 »

  1.   

    Page的Load中动态创建控件并绑定事件太迟了,你可以试试在Init方法中创建绑定并绑定事件。
      

  2.   

    this.LoadData(id); private void LoadData()
    ?
      

  3.   

    if (!IsPostBack) 

    this.LoadData(); 


    是这样的
      

  4.   

    主要我是问Fj_Manage这个里面的LDel.Click += new System.EventHandler(LDel_Click);这一句为什么不能执行,因为我调试的时候是不执行private void LDel_Click(object sender,System.EventArgs e) 这个的,直接就到了private void Page_Load了
      

  5.   

    考虑到viewstate,当然是在Init里加下面代码最合理。
    不过,像下面这样子也没问题啊。protected void Page_Load(object sender, EventArgs e)
    {
            Button btn = new Button();
            btn.ID = "Button1";
            btn.Text = "Damn";
            btn.Click += new EventHandler(btn_Click);        this.form1.Controls.Add(btn);
    }void btn_Click(object sender, EventArgs e)
    {
            Response.Write("damn");
    }
      

  6.   

    动态控件事件不执行,
    多为两种原因:
    (前提是在Page_Init中创建的控件)
    1:没有给ID;
    2:事件之前又执行了绑定;
      

  7.   

    楼主的情况也可能是由于if(!IsPostBack)引起的,而且很有可能。就像上面这个例子,第一次显示的时候把Button加进页面了。点击页面上的Button,这回不再把Button加进页面了,也没有给Button附加btn.Click += new EventHandler(btn_Click);这个动作了。所以你可以试试把if(!IsPostBack)去掉。
      

  8.   

    5楼的不行,因为我要从数据库中取值,把值放到textbox里面,然后才生成控件
    6楼可不可以根据我上面的代码给一个解决方案
      

  9.   

    还不明白吗?这个不是winform.!IsPostBack里执行的是第一次显示时的代码。后续的PostBack将不再执行!IsPostBack里的代码。
    那你叫服务器到哪里去找Btn的Click处理代码呢!
      

  10.   

    那有没有办法点击那个Btn就只执行一段代码呢?
      

  11.   

    自定义的控件就不能象.net给出的BTN控件那样用吗,双击一下,然后在事件里写代码?