错误:
cannot refer to an instance member of a class within a shared method
我正在开发一个Web应用程序,它从后端的MSSQL服务器中提取数据。从ajax调用我的web方法不是问题,它会在收到数据后显示数据。
我的报告页面上有以下gridview:
<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)。
有没有办法将GridView的DataSource
分配给从.asmx文件中提取的DataSet,或者我可以尝试一个很好的解决方法?我已经尝试在代码隐藏报告页面中创建共享方法,但没有运气,并且将GetSpecificReport方法放在代码隐藏中。
感谢您的帮助,请告诉我是否应该提供更多信息或发布更多代码。
答案 0 :(得分:3)
我会提出3条建议:
首先,使用像telerik网格这样的东西,允许你从你的web方法返回JSON并直接绑定到那个json: http://www.telerik.com/products/aspnet-ajax/grid.aspx
也就是说,我掀起了一个小例子,你可以在你的web方法中渲染gridview并重新发出HTML。
您也可以使用RenderControl在HTML中绘制表格:
这是一个使用jquery.ajax重新绘制控件而没有任何更新面板等的简化示例。尽管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&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,并使用它来实时绑定到网格角度。
答案 1 :(得分:0)
我认为使用更新面板可以实现您想要的效果,而无需进行太多更改。
http://msdn.microsoft.com/en-gb/library/bb399001.aspx
基本上在页面加载时填充网格,或者使用updatepanel刷新任何适合您的网格。