Domanda

Se ho due caselle di riepilogo, con un pulsante tra di loro, come faccio aggiornare gli elementi di ListBox2 se gli elementi di ListBox2 sono databound?

<asp:ListBox runat="server" ID="ListBox1" DataSourceID="DataSource1"
     DataTextField="Name" DataValueField="ID" SelectionMode="Multiple" />

<asp:Button runat="server" ID="addButton" onClick="addButton_Click" />

<asp:ListBox runat="server" ID="ListBox2" DataSourceID="DataSource2"
     DataTextField="Name" DataValueField="ID" SelectionMode="Multiple" />

Anche se uso il SelectionMode = "Multiple", sarò in grado di aggiornare il DataSource utilizzando un UpdateCommand che prende un elemento alla volta?

EDIT:

Ok, per aggiungere qualche precisazione:

  • I due listboxes sono DataBound di dati univoci (SqlDataSource).
  • Voglio aggiungere elementi da ListBox1 a ListBox2 e viceversa, quando un utente fa clic su un pulsante.
  • Voglio essere in grado di aggiungere più elementi alla ListBox (presumere che la selezione multipla è attivata)
  • Voglio che per attivare un UpdateCommand sul DataSource.

Finora l'unico modo in cui sono in grado di raggiungere questo obiettivo è quello di prendere manualmente ciascun elemento dalla prima ListBox e aggiungendo come parametro per UpdateCommand del DataSource e manualmente chiamare il metodo SqlDataSource.Update (). Questo funziona, ma significa che Mi sia bisogno di passare una stringa delimitata per più selezioni o aprire connessioni multiple. Quello che sto cercando è un modo per aggiornare il DataSource sulla ListBox e una volta che è completamente aggiornato, quindi chiamare il Bind / Update e persistono i dati al DB.

È stato utile?

Soluzione

La prima domanda è sono gli elementi che si desidera aggiungere che sono al di fuori del DataSource binded statico o dinamico. Se si dispone di un paio di elementi che si desidera aggiungere che sarà sempre lo stesso, come un'opzione "None", quindi è possibile aggiungere nella vostra ASP come ListItem e impostare la proprietà AppendToDataSource su True.

Se si desidera inserire dinamicamente i valori insieme ai valori databound, allora è possibile impostare il valore DataSource a una funzione C # e non impostare il DataSourceID. Si sarebbe simile a questa.

<asp:ListBox runat="server" ID="ListBox2" DataSource='<%# myFunc() %>'
 DataTextField="Name" DataValueField="ID" SelectionMode="Multiple" />

Poi, nel C # codefile avete

    protected ListItem[] myFunc()
        {
          ListItem[] retVals;

          //write your code here to get your data from DataSource2 and whatever other sources you need

          //then create a ListItem for each row of data you want to show, 
          //set the text and the value attributes and return an array of all the values in the order you want

          return retVals;    
         }

Questo vi permetterà di tenere qualsiasi funzionalità chiamata DataBind si può avere già sviluppato in quanto questa funzione verrà chiamato ogni volta che il metodo DataBind dell'oggetto è chiamato.

Altri suggerimenti

Aggiungi un gestore di eventi per l'evento DataBound di ListBox2. Che attiverà dopo che i dati di SQL è legato e vi darà l'opportunità di aggiungere dati aggiuntivi.

Non è importante che il vostro listbox binded a un DataContext o non si dovrebbe usare

ListBox1.Items.Add(/*your listBox Item*/);// for example if you have a person listbox you should have - ListBox1.Items.Add(new Person(1,"Nasser","Hajloo");

Ricordate solo che si dovrebbe aggiungere elementi dopo il legame voglio dire

ListBox1.DataSource = myDBList;
ListBox1.DataBind();
//some other code 
ListBox1.Items.Add(new Person(1,"Nasser","Hajloo");
ListBox1.DataBind();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top