2010-11-23 17 views
1

Wir verwenden ASP.NET 1.1 für eine Website-Entwicklung, die DataGrid-Steuerelement zum Anzeigen von Daten verwendet.Zeile zwischen zwei Zeilen einfügen

Kann ein Körper vorschlagen, wie ich Zeilen zwischen zwei Zeilen in DataGrid-Steuerelement einfügen kann.

Danke,

-Narendra

+0

Vielleicht etwas Code zeigen wie bist du verbindlich? –

Antwort

0

Sie werden diese Zeile in der Datenquelle einfügen müssen - vielleicht ein Datatable.

Dann müssen Sie sicherstellen, dass das Gitter nach Ihrer Anforderung sortiert ist. Sie möchten die neue Zeile an einer bestimmten Stelle einfügen, also möglicherweise eine SortOrder-Spalte auf Ihrer DataTable implementieren und die Werte in dieser Spalte explizit für alle Zeilen unter der neuen Zeile gemäß Ihren Anforderungen vor dem Binden aktualisieren.

+0

Danke Campbell für die Antwort. Ich habe versucht, eine Reihe zu Datentabelle hinzuzufügen und das Datagrid mit spätester Datentabelle neu zu binden, aber kein Glück. Die neu hinzugefügte Zeile wird zum letzten hinzugesetzt. –

+0

Wenn Sie neu binden, nach was sortieren Sie, oder gibt es eine Bestellung in Ihrem SQL, die die Bestellung generiert? – Matt

+0

Hallo Campbell, kannst du mir bitte mit einem Beispiel helfen. –

0

Sie können die neue Zeile in die Datenquelle einfügen (z. B. eine DataTable). DataRowCollection hat eine Funktion InsertAt, mit der Sie Zeilen an der gewünschten Position einfügen können.

Ich werde ein einfaches Beispiel geben (in VB.Net mit einem Gridview, arbeitet Datagrid gleich):

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> 

Codebehind:

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