Frage

Wenn ich zwei Listboxen haben, mit einem Knopf zwischen ihnen, wie ich die Artikel von ListBox2 aktualisiere wenn ListBox2 Artikel sind 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" />

Auch wenn ich die selection verwenden = „Multiple“, kann ich die Datasource aktualisieren einen Update verwenden, die zu einem Zeitpunkt ein Element nimmt?

EDIT:

Ok, eine Klarstellung hinzuzufügen:

  • Die beiden Listboxen sind Databound zu eindeutigen Daten (SqlDataSource).
  • Ich mag Artikel von ListBox1 zu ListBox2 und umgekehrt an, wenn ein Benutzer auf eine Schaltfläche klickt.
  • Ich möchte das ListBox mehrere Elemente hinzufügen können (davon ausgehen, dass die Mehrfachauswahl eingeschaltet ist)
  • Ich möchte, dass ein Update auf der Datasource auszulösen.

Bisher ist der einzige Weg, ich bin in der Lage, dies zu erreichen ist, indem Sie manuell jedes Element aus dem ersten List-Box zu nehmen und sie als Parameter an die Datasource des Update Hinzufügen und manuell die SqlDataSource.Update () -Methode aufrufen. Dies funktioniert, aber es bedeutet, dass ich entweder Notwendigkeit, eine getrennte Zeichenfolge für eine Mehrfachauswahl oder öffnen Sie mehrere Verbindungen passieren. Was ich suche ist eine Möglichkeit, die Datasource auf der List-Box zu aktualisieren und, sobald es vollständig aktualisiert wird, dann die Bind / Update aufrufen und die Daten zurück an die DB bestehen bleiben.

War es hilfreich?

Lösung

Die erste Frage ist sind die Elemente, die Sie hinzufügen möchten, die außerhalb der Binded Datasource statisch oder dynamisch sind. Wenn Sie ein paar Punkte haben mögen Sie hinzufügen, dass immer das gleiche sein, wie eine Option „Keine“, dann können Sie es in Ihrem ASP als ListItem hinzuzufügen und die AppendToDataSource Eigenschaft auf True gesetzt.

Wenn Sie möchten, um dynamisch Einsatz Werte zusammen mit den Databound-Werten, dann können Sie Ihren Datasource Wert auf eine C # Funktion gesetzt und Ihre DataSourceID nicht gesetzt. Es würde so aussehen.

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

Dann in Ihrem C # Codefile Sie haben

    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;    
         }

Dies ermöglicht es Ihnen jede DataBind Call-Funktionalität, um Sie bereits entwickelt haben, da diese Funktion jedes Mal, wenn die DataBind Methode des Objekts aufgerufen wird erhalten aufgerufen wird.

Andere Tipps

Fügen Sie einen Ereignishandler für Databound-Ereignis des ListBox2. Das wird ausgelöst, nachdem die SQL-Daten gebunden ist, und gibt Ihnen die Möglichkeit, zusätzliche Daten hinzuzufügen.

Es ist nicht wichtig, dass Ihr listbox zu einem Datacontext binded oder nicht, sollten Sie verwenden

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");

nur daran erinnern, dass Sie Artikel nach Bindung hinzufügen sollte ich meine

ListBox1.DataSource = myDBList;
ListBox1.DataBind();
//some other code 
ListBox1.Items.Add(new Person(1,"Nasser","Hajloo");
ListBox1.DataBind();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top