簡體   English   中英

動態添加的GridView的鏈接按鈕不起作用

[英]Dynamically added gridview's linkbutton not working

我有一個動態創建列的gridview。

現在所有數據都顯示在各自的位置,但是我無法使我的鏈接按鈕正常工作。 (Gridview消失)

這是我的后端代碼,使用的gridview只是一個空的gridview

protected void Page_Load(object sender, EventArgs e)
{
    if (!this.IsPostBack)
    {
        TemplateField tfield = new TemplateField();
        tfield.HeaderText = "View";
        GridView1.Columns.Add(tfield);
    }
    GridView1.DataBind();
}

string selectedID = null;
private void BindGrid(List<string> SelectedInfo)
{
    DataTable dt = new DataTable();

    //Dynamically adding columns and setting first column added as ID
    selectedID = SelectedInfo[0];
    for (int i = 0; i < SelectedInfo.Count; i++)
    {
        dt.Columns.Add(new DataColumn(SelectedInfo[i], typeof(string)));
    }

    List<string[]> InfoList = getInfoList(SelectedInfo);

    for (int i = 0; i < InfoList.Count; i++)
    {
        dt.Rows.Add(InfoList[i]);
    }

    GridView1.DataSource = dt;
    GridView1.DataBind();
}

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {   //Adding link button to first column
        LinkButton lnkView = new LinkButton();
        lnkView.ID = "lnkView";
        lnkView.Text = "View";
        lnkView.Click += ViewDetails;
        lnkView.CommandArgument = (e.Row.DataItem as DataRowView).Row[selectedID].ToString();
        e.Row.Cells[0].Controls.Add(lnkView);
    }
}

protected void ViewDetails(object sender, EventArgs e)
{
    //Popup the selected row ID
    LinkButton lnkView = (sender as LinkButton);
    GridViewRow row = (lnkView.NamingContainer as GridViewRow);
    string id = lnkView.CommandArgument;
    ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('Row ID" + id + "')", true);
}

protected void CheckBoxList2_SelectedIndexChanged(object sender, EventArgs e)
{
    List<string> SelectedInfo = new List<string>();
    for (int i = 0; i < CheckBoxList2.Items.Count; i++)
    {
        if (CheckBoxList2.Items[i].Selected)
        {
            SelectedInfo.Add(CheckBoxList2.Items[i].Text);
        }
    }

    BindGrid(SelectedInfo);
}

如果需要在運行時創建控件,則最好使用RowCreated事件:

protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {   //Adding link button to first column
        LinkButton lnkView = new LinkButton();
        lnkView.ID = "lnkView";
        lnkView.Text = "View";
        lnkView.Click += ViewDetails;
        lnkView.CommandArgument = (e.Row.DataItem as DataRowView).Row[selectedID].ToString();
        e.Row.Cells[0].Controls.Add(lnkView);
    }
}

否則,您必須在每次回發inViewDetails的Page_Load事件上綁定GridView

無論如何,如果GridView消失了,那僅僅是因為您必須在ViewDetails方法中再次將其綁定。

希望以下代碼對您有所幫助。

                     protected void Page_Load(object sender, EventArgs e)
                            {
                                if (!this.IsPostBack)
                                {
                                    TemplateField tfield = new TemplateField();
                                    tfield.HeaderText = "View";
                                    GridView1.Columns.Add(tfield);
                                }
                                this.BindGrid();
                            }
                            private void BindGrid()
                            {
                                DataTable dt = new DataTable();
                                dt.Columns.AddRange(new DataColumn[2] { new DataColumn("Id", typeof(int)),
                                            new DataColumn("Name", typeof(string))  });
                                dt.Rows.Add(1, "A");
                                dt.Rows.Add(2, "B");

                                GridView1.DataSource = dt;
                                GridView1.DataBind();
                            }

                            protected void OnRowDataBound(object sender, GridViewRowEventArgs e)
                            {
                                if (e.Row.RowType == DataControlRowType.DataRow)
                                {
                                    LinkButton lnkView = new LinkButton();
                                    lnkView.ID = "lnkView";
                                    lnkView.Text = "View";
                                    lnkView.Click += ViewDetails;
                                    lnkView.CommandArgument = (e.Row.DataItem as DataRowView).Row["Id"].ToString();
                                    e.Row.Cells[2].Controls.Add(lnkView);
                                }
                            }

                            protected void ViewDetails(object sender, EventArgs e)
                            {
                                LinkButton lnkView = (sender as LinkButton);
                                GridViewRow row = (lnkView.NamingContainer as GridViewRow);
                                string id = lnkView.CommandArgument;
                                ClientScript.RegisterStartupScript(this.GetType(), "alert", "alert('Id: " + id + "')", true);
                            }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM