2010-11-23 36 views
1

Nous utilisons ASP.NET 1.1 pour le développement d'un site Web, en utilisant le contrôle DataGrid pour afficher des données. Un corps peut suggérer comment insérer des lignes entre deux lignes dans le contrôle DataGrid.Insérer une ligne entre deux lignes

Merci,

-Narendra

+0

montrent peut-être un peu de code sur la façon dont vous liez? –

Répondre

0

Vous devez insérer cette ligne dans votre source de données - peut-être un DataTable.

Ensuite, vous devrez veiller à ce que la grille est triée selon vos besoins. Vous voulez la nouvelle ligne dans un endroit spécifique, alors peut-être implémenter une colonne SortOrder sur votre DataTable, et mettre à jour explicitement les valeurs dans cette colonne pour toutes les lignes sous la nouvelle ligne, selon vos besoins, avant la liaison.

+0

Merci campbell pour la réponse. J'ai essayé d'ajouter une ligne à datatable et relier le datagrid avec le dernier datatable, mais pas de chance. La ligne nouvellement ajoutée ajoute au dernier plutôt qu'à la ligne. –

+0

si vous reliez ce que vous êtes en train de trier ou y a-t-il un ordre dans votre SQL générant la commande? – Matt

+0

Salut Campbell, pouvez-vous s'il vous plaît m'aider avec un exemple. –

0

Vous pouvez insérer la nouvelle ligne à la source de données (par exemple, un DataTable). DataRowCollection a une fonction InsertAt qui vous permet d'insérer des lignes à la position souhaitée.

Je fournirai un exemple simple (en VB.Net avec un GridView, DataGrid fonctionne de la même):

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