dtbl.Rows.Add(dtbl.NewRow());
Это утверждение вызывает все ваши проблемы.
Вы наивно пытаетесь отобразить пустую строку, чтобы сделать видимым нижний колонтитул. Но эта строка вида сетки, когда вид сетки передается обратно, не содержит ручных операций, которые вы над ней выполняли. Предполагается, что в нулевой позиции есть строка, и поэтому также отображается кнопка действия Edit
.
Вот исправление.
Прежде всего, чтобы предотвратить дублирование кода, мы переместите создание строки «Нет данных» в метод с перегрузкой для обработки случаев PostBack и! PostBack:
private void InsertNoDataRow()
{
InsertNoDataRow(null);
}
private void InsertNoDataRow(DataTable dtbl)
{
if (dtbl != null)
{
dtbl.Rows.Add(dtbl.NewRow());
maGrid.DataSource = dtbl;
maGrid.DataBind();
}
maGrid.Rows[0].Cells.Clear();
maGrid.Rows[0].Cells.Add(new TableCell());
maGrid.Rows[0].Cells[0].ColumnSpan = maGrid.Columns.Count;
maGrid.Rows[0].Cells[0].Text = "No Data";
maGrid.Rows[0].Cells[0].HorizontalAlign = HorizontalAlign.Center;
ClientScript.RegisterStartupScript(this.GetType(), "hash", "location.hash = '#ventes';", true);
}
Затем в обработчике события Page_Load; мы называем их соответственно. Обратите внимание, что мы также вызываем этот метод, когда используется PostBack:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
. . .
. . .
if (dtbl.Rows.Count > 0)
{
maGrid.DataSource = dtbl;
maGrid.DataBind();
}
else
{
InsertNoDataRow(dtbl);
}
}
else
{
if (maGrid.Rows[0].Cells[0].Text == "No Data")
{
InsertNoDataRow();
}
}
}
И остается только одна вещь, с которой вы, вероятно, уже работаете. Когда запись добавляется (вызывается действие Add), нам нужно повторно связать таблицу данных, чтобы избавиться от фиктивной строки «No Data». Поскольку вы не опубликовали код для этого метода, я могу предоставить только необходимые шаги в виде комментариев:
protected void ButtonAdd_Click(object sender, EventArgs e)
{
// Insert into DB.
// Now we need to remove row 0 if it is still the dummy row showing "No Data".
// Reselect the data table and bind again.
// This time we expect at least one row to exist.
}