我是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)
通常,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)