如何在GridView外部控件发生PostBack后更新GridView

本文关键字:GridView PostBack 更新 控件 外部 | 更新日期: 2023-09-27 17:50:17

我有一个GridView,当用户点击这个GridView之外的按钮时要更新,GridView列应该为特定的行更新。所以我把GridView的新数据放在PostBack中。但是我们知道PostBackOnClick按钮事件之前被调用。所以此时GridView是绑定的。但是,我希望根据OnClick按钮事件中的一些操作更新特定行的GridView列值。所以我也试着在OnClick按钮事件中绑定GridView。但它没有得到更新。所以我主要的怀疑是。

是否有可能在PostBack块中从引起PostBack的Click事件中调用的方法中传递值?

private void bindTheGriView()
    {
        DataTable dt = new DataTable();
        DataRow dr = null;
        dt.Columns.Add(new DataColumn("Row Number", typeof(string)));
        dt.Columns.Add(new DataColumn("POS Id", typeof(string)));
        dt.Columns.Add(new DataColumn("Action", typeof(string)));
        dt.Columns.Add(new DataColumn("Status", typeof(string)));
        for (int index = 0; index < m_listStrPendingListOfPOS.Count; index++)
        {
            dr = dt.NewRow();
            int iRowNo = index + 1;
            dr["Row Number"] = iRowNo;
            string strGridViewPOSId = m_listStrPendingListOfPOS[index];
            dr["POS Id"] = strGridViewPOSId;
            dr["Action"] = string.Empty;
            //check for the flag. if the flag is true set status to Pending else to Associated
            dr["Status"]=((Label)GridViewMultiplePOSAssociationId.Rows[index].FindControl("LabelStatusPendingPOSId")).Text;
           dt.Rows.Add(dr);
        }
        ViewState["POSTable"] = dt;
        GridViewMultiplePOSAssociationId.DataSource = dt;
        GridViewMultiplePOSAssociationId.DataBind();
    }

    protected void btnSave_Click(object sender, EventArgs e)
{
    bool statusFlag=false;
    if (ViewState["RowIndexPOS"] != null)
    {
        int iRowIndex = Convert.ToInt32(ViewState["RowIndexPOS"]);
        Label lblStatus = (Label)GridViewMultiplePOSAssociationId.Rows[iRowIndex].FindControl("LabelStatusPendingPOSId");
        //Means all rows in GridView are successfully associated
        if (table.Rows.Count == iResultCount)
        {
            lblStatus.Text = "Associated";
        }
        else
        {
            lblStatus.Text = "Pending";
        }
    }
    //now call the binding method with the bool flag value
     bindTheGriView();
}

不,我没有使用更新面板

如何在GridView外部控件发生PostBack后更新GridView

不要在回发中这样做。将数据绑定抽象为一个方法,并从适当的事件中调用该方法。

public void BindMyData()
{
    // Do data bindings on all bound controls
}
public void Page_Load(object sender, EventArgs e) 
{
    if (!IsPostBack)
        BindMyData();
}
public void myClick(object sender, EventArgs e)
{
    // Update the data in the repository

    BindMyData();
}

或者,您可以将数据绑定移动到Page_PreRender事件,以确保它总是在任何控件动作之后绑定。