当前位置: 首页 > 知识库问答 >
问题:

链接按钮不触发动态网格视图中asp.net

阴飞星
2023-03-14

我有一个带有两个链接按钮的动态gridview。如果我点击链接按钮,事件不会触发。但如果我在页面加载中调用“display”方法,它就可以正常工作了。代码如下

public void display()
    {
       GridView grdv = new GridView();
        grdv.AutoGenerateColumns = false;
        DataSet ds = new DataSet();
        DataTable dt = new DataTable();
        BL.ESSBL bl = new BL.ESSBL();
        ds = bl.GetContactList();//getting datatable
        if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
        {
            dt = ds.Tables[0];
            grdv.RowDataBound += new GridViewRowEventHandler(grdv_RowDataBound);
            grdv.DataSource = null;
            grdv.DataBind();
            grdv.Columns.Clear();
            for (int i = 0; i < dt.Columns.Count; i++)
            {
                BoundField boundfield = new BoundField();
                boundfield.DataField = dt.Columns[i].ColumnName.ToString();
                boundfield.HeaderText = dt.Columns[i].ColumnName.ToString();
                grdv.Columns.Add(boundfield);
            }
            TemplateField tmf = new TemplateField();
            grdv.Columns.Add(tmf);
            tmf = new TemplateField();
            grdv.Columns.Add(tmf);
            grdv.DataSource = dt;
            grdv.DataBind();
            pnlupdate.Controls.Add(grdv);
           }
    }
 void grdv_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {    
           int count= e.Row.Cells.Count;
            LinkButton lnkupdate= new LinkButton();
            lnkupdate.ID = "Update";
            lnkupdate.Text = "Update";
            LinkButton lnkdelete = new LinkButton();
            lnkdelete.ID = "delete";
            lnkdelete.Text = "delete";
            lnkdelete.Click += new EventHandler(lnkdelete_Click);
            lnkupdate.CommandArgument = (e.Row.DataItem as DataRowView).Row[0].ToString();
            lnkdelete.CommandArgument = (e.Row.DataItem as DataRowView).Row[0].ToString();
            lnkupdate.Click += new EventHandler(lnkupdate_Click);
            e.Row.Cells[count-2].Controls.Add(lnkupdate);
            e.Row.Cells[count-1].Controls.Add(lnkdelete);

        }
    }
   protected void ddlProcess_SelectedIndexChanged(object sender, EventArgs e)
    {
      dynamicgridview();        // not working
            Clear();
    }

void lnkupdate_Click(object sender, EventArgs e)
    {
        Response.Write(@"<script language=""javascript"">alert(""update details "");</script>");
    }

如果我把“显示”方法放在页面加载中,它将调用每个回发。我不想要那个。我想在下拉选择更改事件中调用此方法。如果我把“显示”方法放在那个链接点击事件不触发。所以我必须做什么来克服这个问题。

共有2个答案

冯胤
2023-03-14

而不是grdv。柱。清除();你能试试看grdv吗。AutoGenerateColumns=false;。因为我不知道你的代码有错误

帅德惠
2023-03-14

如果回发后未绑定网格,则必须在加载页面之前创建gridview。GridView需要加载ViewState。

    private GridView gv;
    protected void Page_Init(object sender, EventArgs e)
    {
        gv = new GridView();
        gv.ID = "gv";
        gv.AutoGenerateColumns = false;
        gv.Columns.Add(new TemplateField());
        gv.RowCreated += gv_RowCreated;
        gv.RowDataBound += gv_RowDataBound;
        pnl.Controls.Add(gv);
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            gv.DataSource = new object[] {
                new object()
            };
            gv.DataBind();
        }
    }

    void gv_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        var lb = e.Row.FindControl("Update") as LinkButton;
        lb.CommandArgument = "1";
    }

    void gv_RowCreated(object sender, GridViewRowEventArgs e)
    {
        // If you bind gridview after Page_Init,
        // This event will not be fired after postback.
        LinkButton lb = new LinkButton();
        lb.ID = "Update";
        lb.Text = "Update";
        lb.Click += lb_Click;
        e.Row.Cells[e.Row.Cells.Count - 1].Controls.Add(lb);
    }

    void lb_Click(object sender, EventArgs e)
    {
        var lb = (LinkButton)sender;
        string arg = lb.CommandArgument;
    }
 类似资料:
  • 因此,我认为这可能与StreamSource有关,但我无法完全找到问题所在。实际上,我有一个Vaadin网格,它从SQL数据库中检索数据。“Image”列保存上传的图像的BLOB值(成功方法)。 我试图做的是允许用户单击表中的按钮,并在弹出视图中显示该图像。 我的ViewExpenses类: 我的后端DbController类获取图像的方法: 这件事让我挠头已经有一段时间了,如果有任何帮助,我将不

  • 我在一个页面上有两个GridView,每个GridView都在代码隐藏中被修改为使用RowDataBound进行分组,在RowDataBound中,我为每个分组添加了一个文本框和按钮。该按钮将添加一个单击事件。此外,每个GridView都位于UpdatePanel中。 为了解决RowDataBound项和动态控件的回发问题,我添加了一个简单的响应。重定向到同一页。这段代码可以工作,但按钮会在Gri

  • 我正在设计一个具有滚动视图的页面,其上方是表格视图(禁用滚动)。为此,我在这个问题中提到了答案 - 使UITableView不可滚动并调整高度以容纳所有单元格,但没有成功。 视图层次结构以及提供的约束- -主视图 -滚动视图< br >固定在主视图的所有边上(0,0,0,0),限制边距 -内容视图 固定到滚动视图(0,0,0,0),与主视图宽度相等,与主视图高度相等(优先级-250) -内容视图中

  • 我已经正确地用html链接了在线引导样式表,但是当我打开链接时,“Click here!”不是一个按钮。我怎么解决这个? 这是我的代码:使用btn-primary 这是输出:No button there

  • 在任何浏览器下,默认的链接都太过平淡,不能满足大多数人的需求。尤其是希望有特大点击区域的链接,比如制作主导航链接、手风琴菜单、按钮等链接时,默认的链接更是无能为力,而按钮式链接便可担此重任。 链接默认是行内元素,只能通过链接文本来激活链接。要想让链接像按钮一样,较大的点击区域,其实很简单。只需为链接添加合适的内边距,并设置类似按钮的背景和边框即可。 a  {     padding: 10px