读书人

gridview分页中控制控件显示隐藏的有关

发布时间: 2012-03-27 13:44:24 作者: rapoo

gridview分页中控制控件显示隐藏的问题
用gridview做的一个下载列表,其中一列是linkbutton控件,需要根据条件判断是否显示。在不分页的情况下都好;在分页后,首次进入页面正常,但点下一页后,不管在转到哪一页,linkbutton的显示隐藏不受控制了,始终为默认属性了。这该怎么解决?

前台:

HTML code
        <table width=100 align=center border="0" cellpadding="0" cellspacing="0" bgcolor="#EBFEFE">           <tr>           <td width=100% colspan="2">               <asp:GridView ID="FileView" SkinID=FileList runat="server" Width="600px"                              AllowPaging="True" ShowFooter="false" PageSize=2 >                    <PagerSettings Visible="False" />                    <Columns>                        <asp:TemplateField HeaderText="附件列表">                            <ItemTemplate>                                    <%# DataBinder.Eval(Container.DataItem,"FILENAME")%>                            </ItemTemplate>                            <ItemStyle HorizontalAlign="Left" Width="90%" />                            <HeaderStyle Font-Bold="True" Font-Size="10pt" Height="28px" HorizontalAlign="Left" />                        </asp:TemplateField>                        <asp:TemplateField ShowHeader="False">                            <ItemTemplate>                                <asp:HyperLink ID="HyperLink_Down" runat="server" Visible=false NavigateUrl='<%# "Down.aspx?FileID=" + DataBinder.Eval(Container.DataItem,"FILEID")%>'>                            下载                                </asp:HyperLink>                            </ItemTemplate>                            <ItemStyle HorizontalAlign="Left" Width="10%" />                        </asp:TemplateField>                    </Columns>                                      </asp:GridView>             </td>             </tr>            <tr>                        <td align="center" height="28" valign=middle>                    <asp:LinkButton ID="lnkbtnFirst" runat="server" OnClick="lnkbtnFirst_Click">首页</asp:LinkButton>                       <asp:LinkButton ID="lnkbtnPrev" runat="server" OnClick="lnkbtnPrev_Click">上一页</asp:LinkButton>                       <asp:LinkButton ID="lnkbtnNext" runat="server" OnClick="lnkbtnNext_Click">下一页</asp:LinkButton>                       <asp:LinkButton ID="lnkbtnLast" runat="server" OnClick="lnkbtnLast_Click">尾页</asp:LinkButton>                        <asp:Label ID="lbCurrentPage" runat="server"></asp:Label>                       <asp:Label ID="lbPageCount" runat="server"></asp:Label>                       <asp:Label ID="lbTaskCount" runat="server"></asp:Label>                        跳转到第                    <asp:DropDownList ID="ddlCurrentPage" runat="server" AutoPostBack="True" OnSelectedIndexChanged="SelectedIndexChanged">                     </asp:DropDownList>                    页                </td>            </tr>                       </table>



后台:
C# code
    protected void Page_Load(object sender, EventArgs e)    {        if (!Page.IsPostBack)        {            DataBind_File();        }        DB.strSql = "………………";        InfoTable = DB.GetDataTable();        this.FileView.DataSource = InfoTable.DefaultView;                //*****************************************************************************        //根据用户和任务判断是否可下载        for (int i = 0; i < this.FileView.Rows.Count; i++)        {            HyperLink linkDown = (HyperLink)FileView.Rows[i].FindControl("HyperLink_Down");            if (InfoTable.Rows[0]["CURSTEP"].ToString() == "42")            {                linkDown.Visible = true;            }        }    }    private void DataBind_File()    {        DB.strSql = "……………………";        InfoTable = DB.GetDataTable();        this.FileView.DataSource = InfoTable.DefaultView;        this.FileView.DataBind();        lbCurrentPage.Text = "第" + (FileView.PageIndex + 1).ToString() + "页";        lbPageCount.Text = "共" + FileView.PageCount.ToString() + "页";        lbTaskCount.Text = "总共" + InfoTable.Rows.Count.ToString() + "项";        if (InfoTable.Rows.Count == 0)        {            lnkbtnFirst.Visible = false;            lnkbtnPrev.Visible = false;            lnkbtnNext.Visible = false;            lnkbtnLast.Visible = false;            lbCurrentPage.Visible = false;            lbPageCount.Visible = false;        }        else if (FileView.PageCount == 1)        {            lnkbtnFirst.Visible = false;            lnkbtnPrev.Visible = false;            lnkbtnNext.Visible = false;            lnkbtnLast.Visible = false;        }        this.ddlCurrentPage.Items.Clear();        for (int i = 1; i <= this.FileView.PageCount; i++)        {            this.ddlCurrentPage.Items.Add(i.ToString());        }        this.ddlCurrentPage.SelectedIndex = this.FileView.PageIndex;    }    protected void SelectedIndexChanged(object sender, EventArgs e)    {        this.FileView.PageIndex = this.ddlCurrentPage.SelectedIndex;        DataBind_File();    }    protected void lnkbtnFirst_Click(object sender, EventArgs e)    {        this.FileView.PageIndex = 0;        DataBind_File();    }    protected void lnkbtnPrev_Click(object sender, EventArgs e)    {        if (this.FileView.PageIndex > 0)        {            this.FileView.PageIndex = this.FileView.PageIndex - 1;            DataBind_File();        }    }    protected void lnkbtnNext_Click(object sender, EventArgs e)    {        if (this.FileView.PageIndex < this.FileView.PageCount)        {            this.FileView.PageIndex = this.FileView.PageIndex + 1;            DataBind_File();        }    }    protected void lnkbtnLast_Click(object sender, EventArgs e)    {        this.FileView.PageIndex = this.FileView.PageCount;        DataBind_File();    } 



[解决办法]
<ItemTemplate>
<asp:HyperLink ID="HyperLink_Down" runat="server" Visible='<%# Eval("CURSTEP").ToString() == "42" %>' NavigateUrl='<%# "Down.aspx?FileID=" + DataBinder.Eval(Container.DataItem,"FILEID")%>'>下载</asp:HyperLink>
</ItemTemplate>

后台的根据权限控制显示部分的代码可以去掉了.

代码我没试过,但我想应该可以实现.

[解决办法]
探讨
不过还是想搞清楚分页下控制控件属性的方法。
我在调试的时候,估计问题在this.FileView.Rows.Count上。

比如共有3项(我设置的pagesize=2),在第一次进入页面时,this.FileView.Rows.Count=2,正常,.Visible也改成true了;点下一页后,第二页显示只有一行了,但this.FileView.Rows.Count却=2,取的是第一页上的值,.Visible也改成true了,但却没有显示;我在第二页上再点上一页,this.FileView.Rows.Count=1,取的是第二页的值,for循环只执行一次,.Visible改成了true,但还是一个也没显示。

读书人网 >asp.net

热点推荐