加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 将数据绑定到网格视图

发布时间:2020-12-16 07:21:38 所属栏目:asp.Net 来源:网络整理
导读:我有以下代码: Imports System.DataPartial 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",Syste
我有以下代码:

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.

您将不得不使用会话变量或数据库来存储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

所以现在代码所做的是实例化一个新的数据表对象,只要我们在页面上(第一篇文章后面)并添加列.一旦定义了数据表,我们就把它放在某个会话状态.当您单击添加按钮时,您不能在之前的代码中继续使用dt,因为您的先前代码中的dt范围已丢失.我们通过分配在临时数据表之前存储的会话数据表来完成此操作.我们添加行并重置会话,下次添加行时它将显示第二行,然后是第三行,依此类推……

我推荐一本很好的asp.net书籍,比如C#2008中的Beginning ASP.net 3.5.有很多关于同一主题的vb.net书籍.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读