3

如果我有两个列表框,它们之间有一个按钮,如果 ListBox2 的项目是数据绑定的,如何更新 ListBox2 的项目?

<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" />

此外,如果我使用 SelectionMode="Multiple",我能否使用一次获取一项的 UpdateCommand 来更新 DataSource?

编辑:

好的,添加一些说明:

  • 两个列表框都是数据绑定到唯一数据 (SqlDataSource)。
  • 当用户单击按钮时,我想将 ListBox1 中的项目添加到 ListBox2 中,反之亦然。
  • 我希望能够向 ListBox 添加多个项目(假设打开了多选)
  • 我希望它触发 DataSource 上的 UpdateCommand。

到目前为止,我能够做到这一点的唯一方法是手动从第一个 listBox 中获取每个项目并将其作为参数添加到 DataSource 的 UpdateCommand 并手动调用 SqlDataSource.Update() 方法。这可行,但这意味着我需要为多个选择传递一个分隔字符串或打开多个连接。我正在寻找的是一种更新 ListBox 上的 DataSource 的方法,一旦它完全更新,然后调用 Bind/Update 并将数据持久化回数据库。

4

3 回答 3

3

第一个问题是您要添加的项目在绑定的 DataSource 静态或动态之外。如果您有几个要添加的项目总是相同的,例如“无”选项,那么您可以将其作为 ListItem 添加到您的 ASP 中,并将 AppendToDataSource 属性设置为 True。

如果要动态插入值以及数据绑定值,则可以将 DataSource 值设置为 C# 函数,而不是设置 DataSourceID。它看起来像这样。

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

然后在你的 C# 代码文件中你有

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

这将允许您保留您可能已经开发的任何 DataBind 调用功能,因为每次调用对象的 DataBind 方法时都会调用此函数。

于 2010-01-07T01:39:12.253 回答
0

为 ListBox2 的 DataBound 事件添加一个事件处理程序。这将在 SQL 数据绑定后触发,并为您提供添加额外数据的机会。

于 2010-01-06T04:27:56.987 回答
0

您的列表框是否绑定到数据上下文并不重要,您应该使用

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

请记住,您应该在绑定后添加项目我的意思是

ListBox1.DataSource = myDBList;
ListBox1.DataBind();
//some other code 
ListBox1.Items.Add(new Person(1,"Nasser","Hajloo");
ListBox1.DataBind();
于 2010-01-06T11:12:50.967 回答