加载时无法加载 Gridview

Posted

技术标签:

【中文标题】加载时无法加载 Gridview【英文标题】:Not able to load the Gridview on Load 【发布时间】:2018-03-26 09:19:22 【问题描述】:

我无法在页面加载时加载 gridview。它一直在给我

未捕获的类型错误:无法读取未定义的属性“长度”。 我已经提到了下面的代码和处理程序。请帮我解决问题。问题发生在 Jquery 中。

 <script type="text/javascript">
             $(document).ready(function () 
                 BindGridView();

             );


 function BindGridView() 
             $.ajax(
                 type: "POST",
                 url: "../Pm/uc/G.ashx/GetMailDetail",
                 contentType: "application/json;charset=utf-8",
                 data: ,
                 dataType: "json",
                 success: function (data) 
                     if (data.d.length > 0) 
                         $("#grdDemo").append("<tr><th>Username</th></tr>");
                         for (var i = 0; i < data.d.length; i++) 

                             $("#grdDemo").append("<tr><td>" + 
                             data.d[i].Username + "</td> <td>");
                         
                     
                 ,
                 error: function (result) 
                 
             );
         
        </script>

     <asp:GridView ID="grdDemo" runat="server">
        </asp:GridView>

这是在处理程序中。(您可以将查询替换为任何内容。)

 public void ProcessRequest(HttpContext context)
    
        //int mailid = int.Parse(context.Request["mid"]);
        //var detail = GetMailDetail(mailid);
        var detail = GetMailDetail();

        if (detail != null)
        
            context.Response.ContentType = "application/json";
            string json = new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(detail);
            context.Response.Write(json);
        
        else
        
            context.Response.StatusCode = 404;
        
    

    //protected object GetMailDetail(int mailid)
    protected object GetMailDetail()
    
        List<DetailsClass> Detail = new List<DetailsClass>();

        Connection Con = new Connection();
        String Connection = Con.Active_Connection();
        SqlConnection con = new SqlConnection(Connection);
        con.Open();
        DataTable dt = new DataTable();

        SqlCommand cmd = new SqlCommand("select Sp4_Txt from  Sp4", con);

        SqlDataAdapter da = new SqlDataAdapter(cmd);
        DataTable dtGetData = new DataTable();

        da.Fill(dtGetData);

        foreach (DataRow dtRow in dtGetData.Rows)
        
            DetailsClass DataObj = new DetailsClass();
            DataObj.Username = dtRow["Sp4_Txt"].ToString();
            Detail.Add(DataObj);
        

        return Detail.ToArray();
    
    public class DetailsClass //Class for binding data
    
        public string Username  get; set; 
    
    public bool IsReusable
    
        get
        
            return false;
        
    

【问题讨论】:

嗨,你能在 $(document) 之前声明函数“函数 BindGridView()”吗?准备好进行任何更改了吗? 你为什么访问data.d.lengthd 在哪里?你期望那会是什么?您是否查看了浏览器的网络控制台以确保您在 AJAX 调用中从服务器接收到您期望的内容? 您为什么不正确处理您的IDisposable 对象,例如 SqlConnection?为什么首先将数据放入 DataTable 而不是直接放入强类型类? 有人可以帮我写代码吗? 【参考方案1】:

无法读取未定义的属性“长度”。

出现此错误是因为您在没有检查data 的情况下访问data.d 并且在没有检查data.d 的情况下访问data.d.length

做这样的事情:

if(data)
    if(data.d)
        if (data.d.length > 0) 
                 $("#grdDemo").append("<tr><th>Username</th></tr>");
                 for (var i = 0; i < data.d.length; i++) 

                     $("#grdDemo").append("<tr><td>" + 
                     data.d[i].Username + "</td> <td>");
                 
             
      

【讨论】:

以上是关于加载时无法加载 Gridview的主要内容,如果未能解决你的问题,请参考以下文章

加载较大数据的 GridView 后,页面事件无法触发

将图像加载到 Gridview

Android--Gridview使用SimpleAdapter加载bitmap图片

Android--Gridview使用SimpleAdapter加载bitmap图片

ASP中 devexpress 的gridview如何让数据加载时就排序

如何在没有 Ajax Toolkit 的情况下显示加载图像直到 gridview 完全加载?