GridView.Row.Count总是0,如何解决?

use*_*166 0 asp.net

我是ASP.NET新手.我使用GridView.当我计算GridView的行时,它总是显示0.我在给代码.但是当我运行代码浏览器时,它会显示数据.怎么解决这个问题?

我的CS代码是:

protected void btnSend_OnClick(object sender, EventArgs e)
    {
        string MemberList= (ViewState["Memberlist"]).ToString();
        List<PreparedEmail> preparedEmail = new List<PreparedEmail>();
        Utility util = new Utility();
        int count = 0;

        int i1 = dlClients.Rows.Count; // it shows always 0
        #region Send Invitation
        foreach (GridViewRow mail in dlClients.Rows)
        {
          //some code here, It is never execute as dlClients.Rows shows 0
         }                            
}
Run Code Online (Sandbox Code Playgroud)

我的aspx代码是:

<asp:GridView ID="dlClients" EnableViewState="false" runat="server" AutoGenerateColumns="False" ClientIDMode="Static" GridLines="None" AllowPaging="false" CssClass="table table-bordered table-striped" OnPreRender="dlClients_PreRender" DataKeyNames="MemberId" PageSize="10" ShowHeader="true"> 
Run Code Online (Sandbox Code Playgroud)

和我的数据绑定代码:

Protected void dlClients_PreRender(object sender, EventArgs e)
    {
        List<CircleUser> memberList = new CircleUserBusinessLogic().GetAll();
        dlClients.DataSource = memberList;

        dlClients.DataBind();
        //GridUpdatePanel.Update();
        ViewState["Memberlist"] = memberList;

        if (dlClients.Rows.Count > 0)
        {
            //Replace the <td> with <th> and adds the scope attribute
            dlClients.UseAccessibleHeader = true;

            //Adds the <thead> and <tbody> elements required for DataTables to work
            dlClients.HeaderRow.TableSection = TableRowSection.TableHeader;

            //Adds the <tfoot> element required for DataTables to work
            dlClients.FooterRow.TableSection = TableRowSection.TableFooter;
        }
    }
Run Code Online (Sandbox Code Playgroud)

Pon*_*amy 5

通常,asp按钮单击事件先调用然后gridview prerender命中第二个.因此Gridview行数为0.

在此输入图像描述

尝试在PageLoad方法或按钮单击中绑定gridview.

这里示例绑定...

protected void Page_Load(object sender, EventArgs e)
        {
            if(!IsPostBack )
            {
                DataTable dt = new DataTable();
                dt = GetData();
                dlClients.DataSource = dt;

                dlClients.DataBind();
            }
        }
Run Code Online (Sandbox Code Playgroud)