2010-11-23 75 views
1

我们使用ASP.NET 1.1进行网站开发,使用DataGrid控件显示数据。在两行之间插入行

可以有人建议如何插入行中的两行之间的数据网格控件。

感谢,

-Narendra

+0

或许表现出一定的代码你如何约束? – 2010-11-23 18:12:56

回答

0

你必须插入该行的数据源 - 也许是一个DataTable。

然后你必须确保网格根据你的要求排序。您需要在特定位置放置新行,因此可能需要在DataTable上实现SortOrder列,然后根据需要在绑定前明确更新该列中的值新行以下的所有行。

+0

感谢坎贝尔的回复。我试着添加一行到数据表中,并用最新的数据表格重新绑定数据网格,但没有运气。新添加的行将添加到最后一行中。 – 2010-11-23 18:21:19

0

您可以将新行插入到数据源(例如DataTable)。 DataRowCollection有一个函数InsertAt,可让您在所需位置插入行。

我会提供一个简单的例子(在VB.Net有一个GridView,DataGrid的工作原理相同):

ASPX:

<asp:GridView ID="MyGrid" runat="server" AutoGenerateColumns="true"> 
     </asp:GridView> 
     <asp:Button ID="BtnInsert" runat="server" Text="insert Obama at Position" /><asp:TextBox ID="TxtPosition" Text="0" runat="server"></asp:TextBox> 

代码隐藏:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
     If Not IsPostBack Then 
      BindData(getDataSource()) 
     End If 
    End Sub 

    Private Function getDataSource() As DataTable 
     Dim tbl As New DataTable 
     Dim col As New DataColumn("ID", GetType(Int32)) 
     tbl.Columns.Add(col) 
     col = New DataColumn("FirstName", GetType(String)) 
     tbl.Columns.Add(col) 
     col = New DataColumn("LastName", GetType(String)) 
     tbl.Columns.Add(col) 
     Dim row As DataRow = tbl.NewRow 
     row("ID") = 1 
     row("FirstName") = "Benjamin" 
     row("LastName") = "Franklin" 
     tbl.Rows.Add(row) 
     row = tbl.NewRow 
     row("ID") = 2 
     row("FirstName") = "Arnold" 
     row("LastName") = "Schwarzenegger" 
     tbl.Rows.Add(row) 
     row = tbl.NewRow 
     row("ID") = 3 
     row("FirstName") = "Albert" 
     row("LastName") = "Einstein" 
     tbl.Rows.Add(row) 
     row = tbl.NewRow 
     row("ID") = 4 
     row("FirstName") = "Bill" 
     row("LastName") = "Gates" 
     tbl.Rows.Add(row) 
     Return tbl 
    End Function 

    Private Sub BindData(ByVal source As DataTable) 
     Me.MyGrid.DataSource = source 
     Me.MyGrid.DataBind() 
    End Sub 

    Private Sub BtnInsert_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles BtnInsert.Click 
     Dim pos As Int32 = 0 
     Int32.TryParse(TxtPosition.Text, pos) 
     Dim source As DataTable = Me.getDataSource() 
     If pos < 0 OrElse pos > source.Rows.Count Then pos = 0 
     Dim row As DataRow = source.NewRow 
     row("ID") = 5 
     row("FirstName") = "Barack" 
     row("LastName") = "Obama" 
     source.Rows.InsertAt(row, pos)'this is the only important' 
     BindData(source) 
    End Sub