我创建了一个返回数据表的类,当我在c#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>
答案 0 :(得分:1)
抛出NullReferenceException
因为您对GridView1
有空引用。这可能是由于几个原因引起的。
GridView1
。可能在页面的构造函数中?如果是这种情况,将逻辑移至PageLoad将解决您的问题。GridView1
永远不会被实例化。如果是这种情况,最好的选择是从标记中删除gridview并重新添加它。 答案 1 :(得分:0)
它可能取决于asp.net web.config中不存在的连接字符串。很难说,因为我们实际上无法看到你的dbLib做了什么。
答案 2 :(得分:0)
将代码更改为下面,在行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);
}
}
答案 3 :(得分:0)
将您的代码更改为:
DataTable dt = dbLib.GetData();
GridView1.DataSource = dt;
GridView1.DataBind();
在调试器中,当您到达GridView1.DataSource = dt;
时,请查看dt是否为空。这将允许您确定问题是GridView还是方法。如果是gridview,请尝试删除EnableModelValidation
并查看异常是否消失。发布上述测试的结果,我们将进一步调查。