将数据从ADO.NET绑定到WPF

时间:2012-02-15 14:42:33

标签: c# wpf binding ado.net

我正在创建一个WPF页面,我希望使用Datagrid公开SQL查询产生的数据。我使用C#和Sqldataadapter。代码隐藏文件中的查询的相关代码是:

string sqlStr2 = "SELECT Conference_Name, Year FROM ....";

SqlDataAdapter dAdapt2 = new SqlDataAdapter(sqlStr2, cnStr);

        DataSet dataSet2 = new DataSet();
        dAdapt2.Fill(dataSet2);

从查询派生的数据必须插入两列。但是,我无法管理它们在xaml文件上。这是xaml代码:

<Grid Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="2" VerticalAlignment="Top" HorizontalAlignment="Left">
            <DataGrid Name="dtg1" AutoGenerateColumns="False" RowHeaderWidth="0" ItemsSource="{Binding Path=dataSet2}" Margin="0,0,0,-23">
                <DataGrid.Columns>
                    <DataGridTextColumn  Width="110"  Header="Conference" Binding="{Binding Path=Conference_Name}" />
                    <DataGridTextColumn Width="110" Header="Year" Binding="{Binding Path=Year}" />
                </DataGrid.Columns>
            </DataGrid>

运行程序时,数据不可见。怎么了?我应该在xaml文件的标题行中声明一个源吗?

3 个答案:

答案 0 :(得分:1)

您需要选择要绑定到的DataGrid的表或视图。 DataSetDataTables的集合。请参阅此相关的SO帖子,了解如何bind a DataSet to the WPF DataGrid

答案 1 :(得分:0)

你需要绑定DataContext这里是一个例子,我将如何在代码后面执行它,例如绑定到Listbox 将此示例替换为下面发布的内容

//string sqlStr2 = "SELECT Conference_Name, Year FROM ....";
//SqlDataAdapter dAdapt2 = new SqlDataAdapter(sqlStr2, cnStr);
//DataSet dataSet2 = new DataSet();
//dAdapt2.Fill(dataSet2);

form load 
{ 
   call BindData();
} //this is sudu code.. 

private void BindData()
{
    DataSet dtSet = new DataSet();
    using (connection = new SqlConnection(connectionString))
    {
        command = new SqlCommand(sql, connection);              
        SqlDataAdapter adapter = new SqlDataAdapter();          
        connection.Open();
        adapter.SelectCommand = command;
        adapter.Fill(dtSet, "Customers");
        listBox1.DataContext = dtSet;
    }

}

使用此链接作为一个很好的示例或我们的MSDN和Google搜索 How to bind a table in a dataset to a WPF datagrid in C# and XAML

答案 2 :(得分:0)

就像silverninja写的那样,你必须绑定到数据表。并且总是需要正确的datacontext。我希望你会使用MVVM。我没有得到的是为什么你在后面的代码中使用绑定时使用绑定。

背后的丑陋代码:

 public class Window1: Window
 {
     private void Anymethod()
     {
        //just some code pieces
        string sqlStr2 = "SELECT Conference_Name, Year FROM MyTable";

        SqlDataAdapter dAdapt2 = new SqlDataAdapter(sqlStr2, cnStr);
        DataSet dataSet2 = new DataSet();
        dAdapt2.Fill(dataSet2);

        this.dtg1.ItemsSource = dataSet2.Tables["MyTable"].DefaultView;
     }
 }

没有绑定的xaml,因为你不需要它。

 <DataGrid Name="dtg1" AutoGenerateColumns="False" RowHeaderWidth="0" Margin="0,0,0,-23">
    <DataGrid.Columns>
      <DataGridTextColumn  Width="110"  Header="Conference" Binding="{Binding Path=Conference_Name}" />
       <DataGridTextColumn Width="110" Header="Year" Binding="{Binding Path=Year}" />
    </DataGrid.Columns>
 </DataGrid>

ps:代码是手写的

pps:你应该真正研究MVVM让事情变得更加清晰;)

ppps:如果你想混淆代码隐藏和绑定,你只需要设置正确的DataContext 并绑定到你的DataTable的公共属性