【发布时间】:2013-01-27 01:57:19
【问题描述】:
我有以下代码:
[WebMethod]
public static string GenerateHtml(string id)
{
//return id;
DataView vwMain2;
try
{
DbProviderFactory dbf = DbProviderFactories.GetFactory();
using (IDbConnection con = dbf.CreateConnection())
{
string sSQL;
sSQL = "select top 20 " + ControlChars.CrLf
+ " ASSISTING_FILE_ID, DATE_ENTERED, CLIENT_CLAIM_NUM, PRIMARY_INSURED, PRIMARY_CLAIMANT, LOB_ID, FILE_STATUS, BRANCH_NAME," + ControlChars.CrLf
+ " OWNERS_FIRST_NAME, OWNERS_LAST_NAME, OWNERS_NAME, OWNERS_EMAIL, OWNERS_OFFICE_PHONE, OWNERS_FAX_PHONE, OWNERS_CELL_PHONE" + ControlChars.CrLf
+ " from vwFILES_DetailViewWithOwners" + ControlChars.CrLf
+ " where 1 = 1 " + ControlChars.CrLf;
//+ " where 1 = 1 and WEB_USER_ID = '" + Security.USER_ID.ToString() + "'" + ControlChars.CrLf;
using (IDbCommand cmd = con.CreateCommand())
{
cmd.CommandText = sSQL;
using (DbDataAdapter da = dbf.CreateDataAdapter())
{
((IDbDataAdapter)da).SelectCommand = cmd;
using (DataTable dt = new DataTable())
{
da.Fill(dt);
vwMain2 = dt.DefaultView;
GridView2.DataSource = vwMain2;
GridView2.DataBind();
}
}
}
}
}
catch (Exception ex)
{
SplendidError.SystemError(new StackTrace(true).GetFrame(0), ex.Message);
//lblError.Text = ex.Message;
}
}
我的 ASPX 页面中有以下内容:
<asp:GridView ID="GridView2" runat="server">
</asp:GridView>
当我尝试在后面的代码中引用 GridView2 时,它显示“非静态字段、方法或属性 GridView2 需要对象引用。”
如何解决此问题,以便在调用 GenerateHtml 时创建网格视图,或者有更好的方法吗?
【问题讨论】:
-
哪一行抛出该错误?是在尝试将视图分配给数据源时发生,还是在调用 DataBind 时发生?
-
作为一般说明。确保使用 Sql 参数而不是直接将字符串输入到 sql 语句中。否则有人可能会执行“where 1 =1”,然后 sql-inject 攻击您的数据库。
-
@dave823 它发生在对
GridView2的两个引用中。 -
好的,谢谢。您的“GenerateHtml”方法是静态的有什么原因吗?您是从代码隐藏 page_load 或某些按钮单击事件中调用此方法,还是您正在调用的自定义类?如果此方法不直接在页面代码隐藏中,则必须将 GridView 对象作为参数传入
-
很抱歉,我没有意识到这是一种网络方法。我猜你正在用 javascript/ajax 调用这个方法。我认为不可能以这种方式绑定到诸如 GridView 之类的控件。您可以将数据返回到屏幕,但不能在 GridView 中。另一张海报发布了一个很好的链接,其中包含在这个 senario 中替代 GridView 的想法。