Ваше событие загрузки страницы вы не проверить, если это сообщение обратно:
If Not IsPostBack Then
'process code if it is not a post back
End If
Everytime нажать кнопку btnAdd ваша страница делает почту обратно на сервер.
Я только заметил, что вы, вероятно, не понимаете время жизни объекта.
Вы сделали это в вашем коде:
Public dt As New DataTable
Проблема, что вы определили, что это переменная класса и после загрузки страницы у вас есть экземпляр типа ДТ, который может иметь несколько столбцов связанные с ним. Но как только вы записываете событие, такое как кнопка, эта ссылка уничтожается и создается новый dt.
Вам нужно будет использовать переменные сеанса или базу данных для хранения состояния dt.
Вот пример в C#:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
DataTable dt = new DataTable();
dt.Columns.Add("ID", System.Type.GetType("System.Int32"));
dt.Columns.Add("univirsity", System.Type.GetType("System.Int32"));
dt.Columns.Add("major", System.Type.GetType("System.Int32"));
Session["MyDataTable"] = dt;
}
}
protected void btnAdd_Click(object sender, EventArgs e)
{
DataTable t = (DataTable)Session["MyDataTable"];
DataRow row1 = t.NewRow();
row1["ID"] = t.Rows.Count + 1;
row1["univirsity"] = 3;
row1["major"] = 31;
t.Rows.Add(row1);
Session["MyDataTable"] = t;
GridView1.DataSource = t;
GridView1.DataBind();
}
И тот же код в vb.net:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
If Not Page.IsPostBack Then
Dim dt As New DataTable()
dt.Columns.Add("ID", System.Type.[GetType]("System.Int32"))
dt.Columns.Add("univirsity", System.Type.[GetType]("System.Int32"))
dt.Columns.Add("major", System.Type.[GetType]("System.Int32"))
Session("MyDataTable") = dt
End If
End Sub
Protected Sub btnAdd_Click(ByVal sender As Object, ByVal e As EventArgs)
Dim t As DataTable = DirectCast(Session("MyDataTable"), DataTable)
Dim row1 As DataRow = t.NewRow()
row1("ID") = t.Rows.Count + 1
row1("univirsity") = 3
row1("major") = 31
t.Rows.Add(row1)
Session("MyDataTable") = t
GridView1.DataSource = t
GridView1.DataBind()
End Sub
Так что теперь, что код делает это экземпляр нового DataTable объект до тех пор, как мы находятся на странице (первый пост назад) и добавляются столбцы. Как только он определил таблицу данных, мы бросаем ее в какое-то состояние сеанса. Когда вы нажимаете кнопку «Добавить», вы не можете в своем предыдущем коде просто продолжать использовать dt, потому что область dt была потеряна в вашем предыдущем коде. Мы делаем это, назначая сессионный datatable, который был сохранен до временного datatable. Мы добавляем строку и перезагружаем сессию таким образом, когда в следующий раз, когда мы добавим строку, она отобразит вторую строку, затем третий ряд и так далее ...
Я рекомендую хорошую книгу asp.net, такую как Начало ASP.net 3.5 в C# 2008. Существует тонна книг vb.net по одному и тому же вопросу.
Спасибо, что было очень полезно –
Как отобразить представление сетки с порядком по столбцу в приведенном выше scienario – Vikram