DataRow.NewRow()是否不足以作为DataTable中的唯一行?我希望这可行,但事实并非如此。它在我的If(!Postback)块中的Page_Load的末尾附近。 gridCPCP为GridView
DataTable dt = new DataTable();
dt.Columns.Add("ID", int.MinValue.GetType());
dt.Columns.Add("Code", string.Empty.GetType());
dt.Columns.Add("Date", DateTime.MinValue.GetType());
dt.Columns.Add("Date2", DateTime.MinValue.GetType());
dt.Columns.Add("Filename", string.Empty.GetType());
//code to add rows
if (dt.Rows.Count > 0)
{
gridCPCP.DataSource = dt;
gridCPCP.DataBind();
}
else
{
dt.Rows.Add(dt.NewRow());
gridCPCP.DataSource = dt;
gridCPCP.DataBind(); //EXCEPTION
int TotalColumns = gridCPCP.Rows[0].Cells.Count;
gridCPCP.Rows[0].Cells.Clear();
gridCPCP.Rows[0].Cells.Add(new TableCell());
gridCPCP.Rows[0].Cells[0].ColumnSpan = TotalColumns;
gridCPCP.Rows[0].Cells[0].Text = "No Record Found";
}
只有当执行到达gridCPCP.DataBind()
块时,异常才会抛出else
。如果通过dt.Rows.Add(new object[] { ... }
绑定工作在上面添加了行。
System.ArgumentOutOfRangeException: Length cannot be less than zero. Parameter name: length
答案 0 :(得分:2)
异常是因为空行。你应该:
.NewRow()
-
myRow = dt.NewRow();
myRow["ID"] = 1001;
myRow["Code"] = "YourCode";
dt.Rows.Add(myRow);
gridCPCP.DataSource = dt;
gridCPCP.DataBind();
答案 1 :(得分:1)
很抱歉,我没有回答您的确切问题,但检查else
块上的代码我不知道...为什么不使用
GridView.EmptyDataTemplate对于您查询的情况没有返回任何数据?
答案 2 :(得分:1)
这也没有真正回答这个问题,但我的解决方案可能是在没有行的情况下根本不打扰调用DataBind()方法,并将错误消息放在GridView之外的asp:Literal中,只有在没有行的情况下才会显示。