如何将列表框绑定到WPF应用程序中的数据表/

时间:2012-09-11 05:40:32

标签: wpf binding listbox

我正在尝试将一列表的内容放入listbox。我使用这段代码来做到这一点。

listBox1.DataContext = ds.Tables[0];

我也尝试使用此代码

listBox1.ItemsSource = ds.Tables[0];

两者都不起作用。

知道我该怎么做?

    namespace itinventory
    {
       /// <summary>
      /// Interaction logic for MainWindow.xaml
      /// </summary>
     public partial class MainWindow : Window
     {
         SqlConnection con ;
         SqlDataAdapter da ;
         DataSet ds;

        public MainWindow()
        {
            InitializeComponent();
            con = new SqlConnection("Server=myserver\\sqlexpress;" + "Database=ITINVENTORY;User ID=sa;" + "Password=mypassword");
            con.Open();
        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            SqlDataAdapter da = new SqlDataAdapter("select DISTINCT orgcode from Employees", con);
            DataSet ds = new DataSet();
            da.Fill(ds,"orgcode");
            listBox1.DataContext = ds.Tables[0];
        }
    }
}    

1 个答案:

答案 0 :(得分:0)

这里有优化的代码和一些建议。

string constring = @"Data Source=.\SQLEXPRESS;AttachDbFilename='D:\TEMPX\Projects X\ODataClient\ODataClient\Data\northwnd.mdf';Integrated Security=True;User Instance=True";
        void button1_Click(object sender, RoutedEventArgs e)
        {
            DataTable dt = new DataTable();
            using (SqlConnection con = new SqlConnection(constring))
            {
                con.Open();
                SqlDataAdapter da = new SqlDataAdapter("select * from Employees", con);

                da.Fill(dt);
                con.Close();
            }

            listBox1.ItemsSource = dt.AsDataView();
        }

我不会告诉你如何编写查询。但对于你的问题,这里有一些观点。

如果您正在使用绑定,那么dataContext就可以了。 DataContext意味着您传递的对象可以进一步绑定到其子属性。你neec绑定ListBox的ItemsSource属性。如

的ItemsSource = {结合}。

 <ListBox x:Name="listBox1">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding FirstName}" />
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>

但是,如果您只是将数据传递给List,那么您需要做的是将数据分配到ItemsSource属性中,并且只显示对象类型Full Name,显示数据。使用上面的模板显示数据。

另一件事是当你将DataTable对象分配给itemsssource / DataContext时,源必须是Enumrable,所以将它用作DataView。它继承了Ilist,IEnumrable。等