Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# asp.net中动态gridview中未触发链接按钮_C#_Asp.net_Gridview - Fatal编程技术网

C# asp.net中动态gridview中未触发链接按钮

C# asp.net中动态gridview中未触发链接按钮,c#,asp.net,gridview,C#,Asp.net,Gridview,我有一个带有两个链接按钮的动态gridview。如果我单击该链接按钮,事件不会触发。但如果我在页面中调用“display”方法,请加载其工作正常。下面的代码 public void display() { GridView grdv = new GridView(); grdv.AutoGenerateColumns = false; DataSet ds = new DataSet(); DataTable dt = new

我有一个带有两个链接按钮的动态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>");
    }
public void display()
{
GridView grdv=新的GridView();
grdv.AutoGenerateColumns=false;
数据集ds=新数据集();
DataTable dt=新的DataTable();
BL.ESSBL=新BL.ESSBL();
ds=bl.GetContactList();//获取数据表
如果(ds!=null&&ds.Tables.Count>0&&ds.Tables[0].Rows.Count>0)
{
dt=ds.表[0];
grdv.RowDataBound+=新的GridViewRowEventHandler(grdv_RowDataBound);
grdv.DataSource=null;
grdv.DataBind();
grdv.Columns.Clear();
对于(int i=0;i
如果我把“display”方法放在页面加载中,它将调用每次回发。我不想这样。我想在下拉选择更改事件中调用此方法。如果我将“display”方法放在该链接中,则单击事件不会触发。
所以我必须做些什么来克服这个问题。

而不是grdv.Columns.Clear();你能试试看grdv.AutoGenerateColumns=false;吗;。因为我不知道您的代码中有错误,如果回发后不绑定网格,您必须在加载页面之前创建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;
    }

它只运行代码。但是在回发后,如果我们不调用页面加载,动态gridview将消失。是否有其他方法保留该gridview。我认为此链接的bcse不起作用。您如何加载您的
下拉列表
,并显示选择更改事件的代码。我认为不处理回发是实际问题。@hassan我用dropdownlist更新了代码。我不想在页面加载中调用display方法。还有其他方法吗。好的,以及如何填充
ddlProcess
?@Hassansar我在页面加载中绑定了一个数据表。gridview正在显示。但如果我单击gridview链接按钮,则不会触发回发上的所有动态控件都需要在控件树中各自的位置重新创建,以便回发和视图状态正常工作。。。