![](/img/trans.png)
[英]Reading a Bitmap from a TIF file - Works in WinForms not in ASP.NET
[英]DataTable works in WinForms but not in ASP.NET
我创建了一个返回数据表的类,当我在ac#winform中使用该类时,使用以下代码正确填充了dataGridView
DataTable dt = dbLib.GetData();
if (dt != null)
{
dataGridView1.DataSource = dbLib.GetData();
}
但是,当我使用ASP.NET尝试相同的操作时,我得到了
你调用的对象是空的。
使用以下代码
DataTable dt = dbLib.GetData();
if (dt != null)
{
GridView1.DataSource = dt;
GridView1.DataBind();
}
dbLib类GetData2可以证明它不是由SQlite或数据引起的
public static DataTable GetData()
{
SQLiteConnection cnn = new SQLiteConnection("Data Source=c:\\test.db");
SQLiteCommand cmd = new SQLiteCommand("SELECT count(Message) AS Occurrences, Message FROM evtlog GROUP BY Message ORDER BY Occurrences DESC LIMIT 25", cnn);
cnn.Open();
SQLiteDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
DataTable dt = new DataTable();
dt.Load(dr);
return dt;
}
public static DataTable GetData2()
{
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("Occurrences", typeof(string)));
dt.Columns.Add(new DataColumn("Message", typeof(string)));
DataRow dataRow = dt.NewRow();
dataRow["Occurrences"] = "1";
dataRow["Message"] = "a";
dt.Rows.Add(dataRow);
return dt;
}
ASP代码
<asp:GridView ID="GridView1" runat="server">
<Columns>
<asp:BoundField DataField="Occurrences" HeaderText="Occurrences"></asp:BoundField>
<asp:BoundField DataField="Message" HeaderText="Message"></asp:BoundField>
</Columns>
</asp:GridView>
抛出NullReferenceException
的原因是您对GridView1
引用为空。 原因可能有两个。
GridView1
。 可能在页面的构造函数中? 如果是这种情况,将逻辑移至PageLoad将解决您的问题。 GridView1
永远不会被实例化。 如果是这种情况,最好的选择是从标记中删除gridview并重新添加它。 它可能取决于asp.net web.config中不存在的连接字符串。 很难说,因为我们实际上看不到您的dbLib做什么。
将代码更改为下面的代码,在断点处放置throw new Exception("Error in GetData()", ex);
让我们知道实际的例外是什么。 我怀疑ASPNET辅助进程帐户没有打开数据库的权限。
public static DataTable GetData()
{
try
{
SQLiteConnection cnn = new SQLiteConnection("Data Source=c:\\test.db");
SQLiteCommand cmd = new SQLiteCommand("SELECT count(Message) AS Occurances, Message FROM evtlog GROUP BY Message ORDER BY Occurances DESC LIMIT 25", cnn);
cnn.Open();
SQLiteDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
DataTable dt = new DataTable();
dt.Load(dr);
return dt;
}
catch (Exception ex)
{
throw new Exception("Error in GetData()", ex);
}
}
将代码更改为此:
DataTable dt = dbLib.GetData();
GridView1.DataSource = dt;
GridView1.DataBind();
在调试器中到达GridView1.DataSource = dt;
查看dt是否为null。 这将使您能够确定问题是否出在GridView或方法上。 如果是gridview,请尝试删除EnableModelValidation
并查看异常是否消失。 发布以上测试的结果,我们将帮助进一步调查。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.