[英]Row count of nested GridView is always zero
父網格視圖是gvAgreement
。
子網格視圖為gvProducts
。
使用的代碼:
protected void gvAgreement_OnRowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
string AgreementId = gvAgreement.DataKeys[e.Row.RowIndex].Value.ToString();
GridView gvProducts = e.Row.FindControl("gvProducts") as GridView;
gvProducts.DataSource = GetData(string.Format("SELECT dbo.Agreement.*, dbo.Agreementlist.*, dbo.Store.*, dbo.Agreementlist.Agreement_ID AS agreid FROM dbo.Agreement INNER JOIN dbo.Agreementlist ON dbo.Agreement.Agreement_ID = dbo.Agreementlist.Agreement_ID INNER JOIN dbo.Store ON dbo.Agreementlist.ProID = dbo.Store.Pro_ID WHERE (dbo.Agreementlist.Agreement_ID = '{0}')", AgreementId));
gvProducts.DataBind();
int count = gvProducts.Rows.Count;
Session["countgrid"] = count;
}
}
protected void gvProducts_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (Convert.ToInt32(Session["countgrid"].ToString()) == 1)
{
string message = "alert('Agreement at least must have one product');";
ScriptManager.RegisterClientScriptBlock(sender as Control, this.GetType(), "alert", message, true);
}
}
我試圖將count定義為全局值,但它也給出了零。
何時/如何對子網格進行數據綁定? 您應該在主網格的OnRowDataBound事件中執行此操作,因為它的內容可能依賴於其所在的主網格的行。
protected void gvAgreement_OnRowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
string AgreementId = gvAgreement.DataKeys[e.Row.RowIndex].Value.ToString();
GridView gvProducts = e.Row.FindControl("gvProducts") as GridView;
if(gvProducts != null)
{
gvProducts.DataSource = [some query or data source here]
gvProducts.DataBind();
}
int count = gvProducts.Rows.Count;
Session["countgrid"] = count;
}
}
編輯后的評論
您不應該將行數存儲在會話變量中。 您不需要,因為您想使用它的地方(在RowCommand事件中),實際上可以找到它是什么。
就像是:
protected void gvProducts_RowCommand(object sender, GridViewCommandEventArgs e)
{
var gvProducts = e.Row.FindControl("gvProducts") as GridView;
if (gvProducts != null && gvProducts.Rows.Count < 1)
{
string message = "alert('Agreement must have at least one product');";
ScriptManager.RegisterClientScriptBlock(sender as Control, this.GetType(), "alert", message, true);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.