2

错误:

cannot refer to an instance member of a class within a shared method

我正在开发一个 Web 应用程序,该应用程序从后端的 MSSQL 服务器中提取数据。从 ajax 调用我的 web 方法不是问题,它会在收到数据后显示数据。

我的报告页面上有以下网格视图:

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

从数据库中提取数据的 Web 方法称为 DBManager.asmx,它的声明如下(每次更改下拉菜单时都会通过 ajax 调用):

<WebMethod()> _
Public Function GetSpecificReport(ByVal strFilter As String) As String()

(它不是报告页面的代码隐藏文件)从 DB 返回的数据当前位于 DataSet(变量名:ds)中。

有什么方法可以将该DataSourceGridView 分配给从 .asmx 文件中提取的 DataSet,或者我可以尝试一个很好的解决方法?我尝试在代码隐藏报告页面中创建共享方法,但没有成功,并将 GetSpecificReport 方法放在代码隐藏中。

感谢您的帮助,让我知道是否应该提供更多信息或发布更多代码。

4

2 回答 2

4

我会提供3个建议:

首先,使用像 Telerik grid 这样的东西,它允许您从 webmethod 返回 JSON 并直接绑定到该 json: http ://www.telerik.com/products/aspnet-ajax/grid.aspx

也就是说,我做了一个小例子,你可以在你的 web 方法中渲染一个 gridview 并重新发出 HTML。

您也可以使用 RenderControl 在 HTML 中绘制表格:

这是一个简化的示例,它使用 jquery.ajax 重新绘制控件而没有任何 updatepanel 等。不过 Updatepanel 可能效果更好!

ASPX:

   <%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
    CodeBehind="Default.aspx.cs" Inherits="TymeJVTest._Default" %>

<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
     <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
    <script>

        function blag() {
            var gridID = "<%= GridView1.ClientID %>";
            $.ajax({
                type: "POST",
                data: {},
                contentType: "application/json;charset=utf-8",
                dataType: "json",
                async: true,
                url: "Default.aspx/GetSomeData",
                success: function (data) {
                    //not sure why this is data.d , but what the hey
                    var theHtml = data.d;
                    $("#" + gridID).html(theHtml);
                },
                failure: function () {
                    alert("Sorry,there is a error!");
                }
            });               
        }
    </script>
    <h2>
        Welcome to ASP.NET!
    </h2>
    <p>
        To learn more about ASP.NET visit <a href="http://www.asp.net" title="ASP.NET Website">www.asp.net</a>.
    </p>
    <p>
        You can also find <a href="http://go.microsoft.com/fwlink/?LinkID=152368&amp;clcid=0x409"
            title="MSDN ASP.NET Docs">documentation on ASP.NET at MSDN</a>.
    </p>
    <asp:GridView ID="GridView1" runat="server">
    </asp:GridView>
    <a href="#"onclick="blag();" >Test</a>
</asp:Content>

CS:

 public partial class _Default : System.Web.UI.Page
    {        
        protected void Page_Load(object sender, EventArgs e)
        {

            int[] theObject = {1, 2, 3, 4};

            GridView1.DataSource = theObject;
            GridView1.DataBind();
        }


        [WebMethod]
        public static String GetSomeData()
        {
            GridView gv = new GridView();
            System.IO.StringWriter stringWriter = new System.IO.StringWriter();
            HtmlTextWriter htmlWriter = new HtmlTextWriter(stringWriter);
            int[] someNewData = {10, 11, 12, 13, 14};
            gv.DataSource = someNewData;
            gv.DataBind();

            gv.RenderControl(htmlWriter);
            return stringWriter.ToString();
        }
    }

这将在服务器上创建一个替换 gridview,将其呈现为 html,然后将其传输回来。

你也可以使用 AngularJS 之类的东西,只保留一段你的服务器更新的 JSON,并使用它来实时绑定到 Angular 的网格。

于 2013-09-26T13:15:18.210 回答
0

我认为您可以使用更新面板来实现您想要的,而无需进行太多更改。

http://msdn.microsoft.com/en-gb/library/bb399001.aspx

基本上在页面加载或任何适合您的情况下填充您的网格,然后使用更新面板进行刷新。

于 2013-04-03T14:01:38.153 回答