0

1 列のテーブルの内容を に入れようとしてい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];
        }
    }
}    
4

1 に答える 1

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 は、その子プロパティにさらにバインドできるオブジェクトを渡すことを意味します。ListBox の ItemsSource プロパティをバインドする必要があります。なので

ItemsSource={Binding}。

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

ただし、データをリストに渡すだけの場合は、データを ItemsSource プロパティに代入する必要があり、データを表示する代わりにオブジェクト タイプのフル ネームのみが表示されます。上記のテンプレートを使用してデータを表示します。

もう 1 つのことは、DataTable オブジェクトを itemsssource/DataContext に割り当てる場合、ソースは Enumrable である必要があるため、これを DataView として使用することです。Ilist 、IEnumrable から継承されます。等

于 2012-09-11T06:37:04.667 に答える