代码之家  ›  专栏  ›  技术社区  ›  JoshJordan

为什么需要databind()方法?

  •  17
  • JoshJordan  · 技术社区  · 17 年前

    我想是个简单的问题。

    很长一段时间以来,当以编程方式对ASP.NET控件进行数据绑定时,我一直盲目地遵循一种(假定的)通用模式。即:

    gridView1.DataSource = someList;
    gridView1.DataBind();
    

    但是,如果我将GridView设置为绑定到数据源 控制 通过datasourceid属性,不需要调用databind()。即:

    gridView1.DataSourceID = LinqDataSource1;
    

    就足够了。

    此外,如果尝试在ASPX标记中设置DataSource属性,则会收到以下消息:

    不能以声明方式设置DataSource属性。

    我假设这些是相关的,但我仍然无法解释为什么需要databind()。DataSource和DataSourceID之间的区别是次要的-我可以理解在那里发生的一些魔力。真正的问题是 为什么数据源属性设置器不自动导致数据绑定? 是否有任何场景需要设置数据源但不绑定到它?

    4 回复  |  直到 9 年前
        1
  •  17
  •   Joel Coehoorn    9 年前

    在ASP.NET中,在页面生命周期中的某些时间点(而不是之前),让某些数据可用并准备就绪通常很重要。例如,您可能需要尽早绑定到下拉列表,以便以后在该列表上设置所选索引。或者您可能需要等待一段时间来绑定大网格,以减少保持连接活动/将数据保存在内存中的时间。

    让你明确地打电话给 .DataBind() 该方法使在频谱两端支持场景成为可能。

        2
  •  2
  •   Matthew Jones    17 年前

    DataSource是BaseDataBoundControl类的属性。DataSourceID是DataBoundControl类的一个属性,它继承自BaseDataBoundControl,并且在ASP.NET 2.0之前不存在。

    由于databoundControl显式地用于以列表或表格形式显示数据,而basedataboundControl无法作出此假设,因此在设置数据源时,绑定不是自动的,因为控件的类型可能与数据的结构不匹配。

    当然,这只是基于msdn文档的猜测,所以我可能是错的。

        3
  •  0
  •   Emad-ud-deen    13 年前

    我注意到,在不使用databind()的情况下,我的GridView中不会显示任何内容,因此我总是将其包含在代码的这一节中:

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    
        ' TableAdapter object.
        ' Provide communication between this application and the database.
        '-----------------------------------------------------------------
        Dim suppliersAdapter As New SuppliersTableAdapter
    
        ' Get the data from the TableAdapter into the GridView.
        '------------------------------------------------------
        GridView1.DataSource = suppliersAdapter.GetSuppliers()
    
        ' Display the result set from the TableAdapter in the GridView.
        '--------------------------------------------------------------
        GridView1.DataBind()
    End Sub
    

    请原谅额外的评论,因为我还在学习ASP.NET,这些评论将帮助我更好地了解“什么和为什么”使用某些语句。

        4
  •  0
  •   Robert Columbia yusuf dalal    9 年前

    试试这个:

    if (GridView1.EditIndex == e.Row.RowIndex)
    {              
        TextBox t2 = (TextBox)e.Row.FindControl("TextBox2");
        DateTime dt2;
        if (DateTime.TryParse(t2.Text, out dt2))
        {
            t2.Text = dt2.ToString("yyyy-MM-dd");
        }
    }
    
    推荐文章