如何在GridView外部控件发生PostBack后更新GridView
本文关键字:GridView PostBack 更新 控件 外部 | 更新日期: 2023-09-27 17:50:17
我有一个GridView
,当用户点击这个GridView
之外的按钮时要更新,GridView
列应该为特定的行更新。所以我把GridView
的新数据放在PostBack
中。但是我们知道PostBack
在OnClick
按钮事件之前被调用。所以此时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();
}
不,我没有使用更新面板
不要在回发中这样做。将数据绑定抽象为一个方法,并从适当的事件中调用该方法。
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
事件,以确保它总是在任何控件动作之后绑定。