+ -
当前位置:首页 → 问答吧 → 创建linkbutton后不执行此button的事件

创建linkbutton后不执行此button的事件

时间:2011-12-05

来源:互联网

在gridview中绑定数据时,添加linkbutton 并添加此button的事件。

运行后,显示出来的页面也是有这个linkbutton的。但是当点击后不能执行那个事件,设置断点也不运行。并且页面一刷新就没有这个linkbutton了。

我知道是控件生命周期的问题,但我不知道怎么写这个代码。

我的代码如下:
gridview_bindata()
{
  LinkButton LbtnGo = new LinkButton();
  LbtnGo = new LinkButton();
  LbtnGo.Text = "続きを見る…";  
  LbtnGo.CommandName = "LBtnGo";
  LbtnGo.Click += new EventHandler(LbtnGo_Click);  
   
  int iGVRows = e.Row.Controls[0].Controls[0].Controls[0].Controls.Count - 1;
   
  e.Row.Controls[0].Controls[0].Controls[0].Controls[iGVRows].Controls.Add(LbtnGo);

}
linkbutton事件:

 protected void LbtnGo_Click(object sender, EventArgs e)
  {
  txtSql = "select * from MSTTGUseOK";
  lblMsg.Text = "执行了!";
   
  }


作者: mark3798   发布时间: 2011-12-05

gridview中的控件的服务器时间必须制定到gridview中的相关事件中(如delete)或者指定到rowcommand中,否则,在服务器段是不会触发的

作者: ximenwuji   发布时间: 2011-12-05

gridview_bindata()

至少要在在Page_load中调用

作者: Sandy945   发布时间: 2011-12-05

哈哈,俺的不传之密还是传了吧

列自己定义,俺只给一个过程
HTML code

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
            <asp:GridView ID="GridView1" runat="server">
            </asp:GridView>
        </div>
    </form>
</body>
</html>



定义一个实现ITemplate 接口的新类 CustomGridView 
C# code

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public class CustomGridView : ITemplate
{ 
    public void InstantiateIn(Control container)
    {
        LinkButton EditButton = new LinkButton();
        EditButton.ID = "EditButton"; // 此处很重要,不要丢失
        EditButton.Text = "编辑";   
        EditButton.Click += new EventHandler(EditButton_Click);
        EditButton.DataBinding += new EventHandler(EditButton_DataBinding);
        EditButton.Visible = true;
        container.Controls.Add(EditButton);
    }

    void EditButton_DataBinding(object sender, EventArgs e)
    {
        LinkButton button = (LinkButton)sender;
        GridViewRow container = (GridViewRow)button.NamingContainer;
        DataRowView drv = container.DataItem as DataRowView;
        button.Text = drv.Row["Name"].ToString();
    }

    void EditButton_Click(object sender, EventArgs e)
    {
        LinkButton button = (LinkButton)sender;
       
    }

}

public partial class _Default : System.Web.UI.Page
{
// 在Page_Init事件里添加模板列
    protected void Page_Init(object sender, EventArgs e)
    {
        TemplateField myTemplateField = new TemplateField();
        myTemplateField.HeaderText = "操作";
        CustomGridView ctgv = new CustomGridView();
        myTemplateField.ItemTemplate = ctgv;
        this.GridView1.Columns.Add(myTemplateField);
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        DataTable dt = new DataTable();
        dt.Columns.Add("ID", typeof(string));
        dt.Columns.Add("Name", typeof(string));
        DataRow dr = null;
        for (int i = 1; i <= 5; i++)
        {
            dr = dt.NewRow();
            dr["ID"] = i.ToString();
            dr["Name"] = "Name" + i.ToString();
            dt.Rows.Add(dr);
        }     

        if (!Page.IsPostBack)
        {
            this.GridView1.DataSource = dt;
            this.GridView1.DataBind();
        }
    }
}




作者: bonnibell   发布时间: 2011-12-05

把这一段
  LinkButton LbtnGo = new LinkButton();
  LbtnGo = new LinkButton();
  LbtnGo.Text = "続きを見る…";  
  LbtnGo.CommandName = "LBtnGo";
  LbtnGo.Click += new EventHandler(LbtnGo_Click);  
放到 (ispostback){}中去,那我在GVVOC_RowDataBound()中怎么调用LbtnGo呢,因为他是局部变量啊。
如果我变成全局变量,这么定义static LinkButton LbtnGo; 代码是可以运行的,但是结果还是和原来的一样,这个事件 protected void LbtnGo_Click(object sender, EventArgs e) 不运行。

在线等待。。。

作者: mark3798   发布时间: 2011-12-05

GridView动态添加模板列 

http://blog.csdn.net/sandy945/article/details/4397142

GridView动态添加模板列(VB.NET版) 

http://blog.csdn.net/sandy945/article/details/4397215

作者: Sandy945   发布时间: 2011-12-05

我不是要动态添加模板,我是想在gridview上加一个linkbutton,如果超过3页就自动追加这个linkbutton,然后通过它来打开所有数据,然后填充到gridview中。

作者: mark3798   发布时间: 2011-12-05

不要放在 ispostback 中

因为你需要每次都创建的

作者: Sandy945   发布时间: 2011-12-05