gpt4 book ai didi

asp.net - 将数据表绑定(bind)到 GridView

转载 作者:行者123 更新时间:2023-12-02 16:05:10 26 4
gpt4 key购买 nike

我有以下代码:

Imports System.Data

Partial Class Students_AddWishes Inherits System.Web.UI.Page

Public dt As New DataTable

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
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"))
End Sub

Protected Sub btnAdd_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnAdd.Click
Dim row1 As DataRow = dt.NewRow()
row1("ID") = dt.Rows.Count + 1
row1("univirsity") = ddlUnivs.SelectedValue
row1("major") = ddlMajors.SelectedValue
dt.Rows.Add(row1)
GridView1.DataSource = dt
GridView1.DataBind()
End Sub

End Class

问题是它只显示一行或一条记录。如何让它显示多条记录?

最佳答案

您没有检查您的页面加载事件是否是回发:

 If Not IsPostBack Then
'process code if it is not a post back
End If

每次单击 btnAdd 按钮时,您的页面都会回发到服务器。

我刚刚注意到您可能不了解对象的生命周期。

您已在代码中完成了此操作:

Public dt As New DataTable 

问题是您已经定义了这是一个类变量,一旦页面加载,您就有了一个 dt 类型的实例,该实例可能有一些与之关联的列。但是,一旦您记录了一个事件(例如单击按钮),该引用就会被销毁并创建一个新的 dt。

您必须使用 session 变量或数据库来存储 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

现在代码所做的就是实例化一个新的数据表对象,只要我们在页面上(首先回发)并添加列。一旦定义了数据表,我们就将其置于某种 session 状态。当您单击“添加”按钮时,您不能在以前的代码中继续使用 dt,因为 dt 范围在您以前的代码中丢失了。我们通过分配在临时数据表之前存储的 session 数据表来做到这一点。我们添加行并重置 session ,这样下次添加行时它将显示第二行,然后是第三行,依此类推...

我推荐一本关于 ASP.NET 的好书,例如《Beginning ASP.net 3.5 in C# 2008》。关于同一主题的 vb.net 书籍有很多。

关于asp.net - 将数据表绑定(bind)到 GridView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2001764/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com