DataTable不会DataBind与DataTable.NewRow()

时间:2010-05-18 17:41:06

标签: .net data-binding gridview

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

3 个答案:

答案 0 :(得分:2)

异常是因为空行。你应该:

  1. 制作新的.NewRow()
  2. 添加所需字段
  3. 添加到DataTable。
  4. -

    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中,只有在没有行的情况下才会显示。