如何在ASP.NET ListBox上处理SqlDataSource的双向绑定

时间:2010-01-04 01:11:02

标签: asp.net listbox datasource databound databound-controls

如果我有两个列表框,它们之间有一个按钮,如果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?

编辑:

好的,添加一些说明:

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

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

3 个答案:

答案 0 :(得分: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方法时都会调用此函数。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

将您的列表框绑定到datacontext并不重要,您应该使用

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