我已经在这方面工作了几天我每次回到这个问题时我都不明白为什么它不能正常工作。
我正在尝试将DataTable绑定到我动态创建的GridView控件。我创建GridView控件,将其添加到表中,然后将DataSource属性分配给我的DataTable。
这是代码:
Table tbl = new Table();
DataTable dattbl = Core.Transreports(Request.QueryString["itemaddress"], Request.QueryString["docnum"], Request.QueryString["docid"]);
GridView dg = new GridView() { ID = "dg", AllowPaging = true, PageSize = 10 };
TableRow tr = new TableRow();
TableCell tc = new TableCell();
tc.Controls.Add(dg);
tc.ColumnSpan = 10;
tr.Cells.Add(tc);
tbl.Rows.Add(tr);
if (dattbl.Rows.Count > 0)
{
dg.DataSource = dattbl;
dg.DataBind();
}
所以当我得到最后一行时,我执行DataBind( dg.DataBind())的方法是我得到空引用异常的地方。
我不确定为什么我遇到这个错误,还没有找到解决方案。我已经检查过以确保DataTable中没有空值,并且没有。所以我很茫然。
帮我堆叠溢出,你是我唯一的希望。
答案 0 :(得分:1)
我用虚拟DataTable替换了您对Core.Transreports(...)
的调用,无法重现这一点。你能提供更多信息吗?堆栈跟踪说什么? Core.Transreports()
如何运作?
答案 1 :(得分:0)
您的代码如下所示:
if (dattbl.Rows.Count > 0){ dg.DataSource = dattbl; dg.DataBind();}
“在最后一行”有例外。
你确定不是dattbl是null吗?
答案 2 :(得分:0)
由于您收到错误是因为gridview不是页面上的控件,您需要做的是在页面中放置<asp:GridView>
,或者将其放在某个asp控件中。然后将该控件放在页面上。这是一个示例:
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="Sample.ascx.cs" Inherits="Contacts" %>
<asp:GridView id="sample" runat="server" AllowPaging="true" PageSize="10"></asp:GridView>
然后你可以从后面的代码中引用gridview,如下所示:
sample.DataSource = dattbl;
sample.DataBind();