DataTable не будет связываться с DataTable.NewRow () - PullRequest
0 голосов
/ 18 мая 2010

Является ли DataRow.NewRow () недостаточной в качестве единственной строки в DataTable? Я ожидаю, что это сработает, но это не так. Это ближе к концу моего Page_Load внутри моего блока If (! Postback). 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 ]

2 голосов
/ 18 мая 2010

Исключение из-за пустой строки. Вы должны:

  1. Создать новый .NewRow()
  2. Добавить нужные поля
  3. Добавить в таблицу данных.

-

myRow = dt.NewRow();
myRow["ID"] = 1001;
myRow["Code"] = "YourCode";

dt.Rows.Add(myRow);
gridCPCP.DataSource = dt;
gridCPCP.DataBind(); 
1 голос
/ 18 мая 2010

Это на самом деле тоже не отвечает на этот вопрос, но мое решение, вероятно, заключалось бы в том, чтобы вообще не беспокоиться о вызове метода DataBind (), если строк нет, и поместить сообщение об ошибке в asp: Literal вне GridView , который отображается, только если строк нет.

1 голос
/ 18 мая 2010

Извините, что я не отвечаю на ваш точный вопрос, но проверяю код в блоке else Интересно ... почему бы вам не использовать GridView.EmptyDataTemplate для случая, когда ваш запрос не вернул данные?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...