簡體   English   中英

嵌套GridView的行數始終為零

[英]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.

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