前台 <asp:GridView ID="ResouMenuID" DataKeyNames="ResourceID" runat="server" 
                AutoGenerateColumns="false" Width="100%" AllowPaging="True" PageSize="15" 
                onpageindexchanging="ResouMenuID_PageIndexChanging" 
                ondatabound="ResouMenuID_DataBound">
                <Columns>
                    <asp:TemplateField>
                        <ItemTemplate>
                            <asp:Image runat="server" ID="image1" />
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:HyperLinkField DataTextField="Title" DataNavigateUrlFields="ResourceID" DataNavigateUrlFormatString="Resource/Detail.aspx?rid={0}" />
                </Columns>
                    <EmptyDataTemplate>
                    没有数据!
                </EmptyDataTemplate>
                <PagerStyle HorizontalAlign="Right" />
            </asp:GridView>
后台:
 private void Bind()
    {
        dbMethod dm=new dbMethod();
        int menuID = int.Parse(Request.QueryString["mID"].ToString());
        ds = dm.getReosurceByMenuIDAndStateID(menuID);
        this.ResouMenuID.DataSource = ds;
        this.ResouMenuID.DataBind();
    }
 protected void ResouMenuID_DataBound(object sender, EventArgs e)
    {
        for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
        {
            Image image = (Image)this.ResouMenuID.Rows[i].FindControl("image1");            string fileName = ds.Tables[0].Rows[i]["FileName"].ToString();            string ex = fileName.Substring(fileName.IndexOf(".") + 1).ToLower();            if (ex == "doc" || ex == "docx" || ex == "wps")
                image.ImageUrl = "image/resimages/doc.png";
            if (ex == "xls" || ex == "xlsx")
                image.ImageUrl = "image/resimages/xls.png";
            if (ex == "ppt" || ex == "pptx")
                image.ImageUrl = "image/resimages/ppt/png";
            if (ex == "rar" || ex == "zip")
                image.ImageUrl = "image/resimages/rar.png";
            if (ex == "gif" || ex == "jpg" || ex == "jpeg" || ex == "bmp" || ex == "psd")
                image.ImageUrl = "image/resimages/jpg.png";
            if (ex == "rtf" || ex == "txt")
                image.ImageUrl = "image/resimages/txt.png";
        }
     //   Bind();
    }
小图片存在本地文件夹内,没有存入数据库,在数据库中也没有链接地址。根据文件扩展名决定显示什么图片
问题:不分页一切都没有问题,一旦分页,就出现“索引超出范围”错误,如果加上Bind()方法,就会出现“该页无法显示”的错误。
希望大家帮忙!

解决方案 »

  1.   

    我先用自定义分页,问题依旧,后来直接用GridView自带的分页功能都不行
    这是自带的分页事件:  
    protected void ResouMenuID_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            this.ResouMenuID.PageIndex = e.NewPageIndex;
            Bind();
        }
      

  2.   

    LZ 分页后提示索引超出范围,报错的地方 是
    ResouMenuID_DataBound(object sender, EventArgs e)
    这个方法里面报错的吧? 你加个判断,判断 fileName 是否为空
      

  3.   

    我调试的时候,发现如果有分页的话,那个fileName一直是一个值,不变化,也没有为空,不太明白是为什么
      

  4.   

    ResouMenuID_DataBound事件是數據每執行一行都運行一次的,
    說白了就有幾條數據,就要執行幾次的。
    LZ你每行執行都是一樣的,所以fileName一直是一个值
     Image image = (Image)this.ResouMenuID.Rows[i].FindControl("image1");
     string fileName = ds.Tables[0].Rows[i]["FileName"].ToString();
     string ex = fileName.Substring(fileName.IndexOf(".") + 1).ToLower();
    請樓主多仔細檢查調試問題。
      

  5.   

    汗 我知道LZ 错在哪里了  LZ 分了页 那么  比如 是每页显示 10条 那么GridView 应该只有10行
    显然LZ 的数据大于10 所以
    Image image = (Image)this.ResouMenuID.Rows[i].FindControl("image1");超出索引
      

  6.   

    恩,所以我特意把i的值调到10,或者用i=this.ResouMenuID.PageSize,测试了一下,还是有问题的呀
      

  7.   

     for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
            {
    }
    这是有问题的ds.Tables[0].Rows.Count这个是你一页有多少个才对啊
      

  8.   

    这里有问题,你一直都是从GridView第一行记录开始查找的,所以一但分页就找不到索引了
      

  9.   

    要把图片路径替换程序改下:
    protected void ResouMenuID_DataBound(object sender, EventArgs e)
        {
            for (int i = ResouMenuID.PageIndex*ResouMenuID.PageSize; i < ResouMenuID.PageSize*(1+ResouMenuID.PageIndex); i++)
            {
                Image image = (Image)this.ResouMenuID.Rows[i].FindControl("image1");            string fileName = ds.Tables[0].Rows[i]["FileName"].ToString();            string ex = fileName.Substring(fileName.IndexOf(".") + 1).ToLower();            if (ex == "doc" || ex == "docx" || ex == "wps")
                    image.ImageUrl = "image/resimages/doc.png";
                if (ex == "xls" || ex == "xlsx")
                    image.ImageUrl = "image/resimages/xls.png";
                if (ex == "ppt" || ex == "pptx")
                    image.ImageUrl = "image/resimages/ppt/png";
                if (ex == "rar" || ex == "zip")
                    image.ImageUrl = "image/resimages/rar.png";
                if (ex == "gif" || ex == "jpg" || ex == "jpeg" || ex == "bmp" || ex == "psd")
                    image.ImageUrl = "image/resimages/jpg.png";
                if (ex == "rtf" || ex == "txt")
                    image.ImageUrl = "image/resimages/txt.png";
            }
         //   Bind();
        }
      

  10.   

    <asp:Image runat="server" src='<%# GetImg(Eval("Id"))%>' ID="image1" />
    public string GetImg(object id)
    {}

    理解使用Page.ResolveUrl
    Image image =e.Row.FindControl("image1") as Image;
      

  11.   

    <asp:Image runat="server" src='<%# GetImg(Eval("FileName"))%>' ID="image1" />后台:
    public string GetImg(object FileName)
    {
    string fileName = (string)FileName;
    string ex = fileName.Substring(fileName.IndexOf(".") + 1).ToLower();
    string imgUrl="";
      if (ex == "doc" || ex == "docx" || ex == "wps")
      imgUrl= "image/resimages/doc.png";
      if (ex == "xls" || ex == "xlsx")
      imgUrl= "image/resimages/xls.png";
      if (ex == "ppt" || ex == "pptx")
      imgUrl= "image/resimages/ppt/png";
      if (ex == "rar" || ex == "zip")
      imgUrl= "image/resimages/rar.png";
      if (ex == "gif" || ex == "jpg" || ex == "jpeg" || ex == "bmp" || ex == "psd")
      imgUrl= "image/resimages/jpg.png";
      if (ex == "rtf" || ex == "txt")
      imgUrl= "image/resimages/txt.png";  return imgUrl;
    }
    向高手学习一下,顺便写写全,呵呵
      

  12.   

    把全部代码都贴出来吧!这样看起来好痛苦 你的分页事件PageIndexChanging应该是PageIndexChanged吧
      

  13.   

    http://blog.csdn.net/21aspnet 建议楼主看看MVP的文章,非常之好。。
      

  14.   


    LZ  难道你是 用 gv  自带 的 分页???
    。。
    还是自己写分页吧(建议)