2010-09-24 35 views
0

Je ne suis pas sûr de savoir comment procéder. Actuellement, dans le premier gridview, est une liste de groupes auxquels un membre a accès. Le second gridview est lié à une table qui contient une liste de chaque type de groupe et possède un bouton Ajouter qui l'ajoute à la première grille et met à jour une table ajoutant ce groupe à un membre.Déplacer une ligne d'un gridview à l'autre

C'est ce que je suis en train de faire:

Lorsque le bouton Ajouter (dans la deuxième gridview) pour une ligne est cliqué, il sera ajouté à la première (comme il le fait actuellement), mais je aimerait aussi qu'il disparaisse de la deuxième grille. Donc, fondamentalement, un groupe ne devrait être visible que dans la première grille ou dans la seconde, pas les deux. Le problème que j'ai est que je ne veux pas modifier la table parce que évidemment la table contient tous les groupes possibles. Aucune suggestion?

Répondre

0

Je ferais tout le travail du côté de la base de données. Source des données pour première est:

Select g.* 
From membership m 
    inner join groups g on m.groupid=g.groupid 
Where m.userid = @userid 

source de données pour le second ressemble

Select g.* 
From groups g 
Where not exists 
    (Select 1 from membership m 
    Where m.GroupID=g.GroupID and m.userid = @userid 

Ensuite, votre bouton Ajouter insère la ligne appropriée dans le tableau et les deux grilles actualisations.

0

Vous pouvez simplement apporter des modifications à l'ensemble de données, puis .AccepterChangements et re-lier. Cela garantirait que les données seraient mises à jour sur l'écran sans pour autant le pousser vers la base de données.

Pseudo exemple:

Dim dt as Datatable = GetData1(strSQL.toString) 
Dim dt2 as Datatable = GetData2(strSQL.toString) 

Public Sub MoveRecord(ByVal dt1 as DataTable, ByVal dt2 as Datatable, ByVal index as Integer) 

'Record being moved ' 
Dim dr as Datarow = dt.Rows(index) 
dt2.Rows.Add(dr) 
dt2.AcceptChanges 
dt.Rows.RemoveAt(index) 
dt.AcceptChanges 

'Bind Gridview 
Perhaps store new changes in Viewstate, 
Cache, or Session for Paging, Sorting' 
End Sub 

Bien sûr, cela suppose les grilles ont les mêmes champs. Si ce n'est pas le cas, vous devrez:

Dim drN as DataRow - dt2.Rows.NewRow 
'Assign rows from moving datarow to new datarow' 
dt2.Rows.Add(drN) 
dt2.AcceptChanges