繁体   English   中英

将数据从ADO.NET绑定到WPF

[英]Bind data from ADO.NET to WPF

我正在创建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文件的标题行中声明源吗?

您需要选择要绑定到DataGrid的表或视图。 DataSetDataTables的集合。 有关如何将DataSet绑定到WPF DataGrid的信息,请参见此相关的SO文章。

您需要绑定DataContext,这是我如何在后面的代码中进行此操作(例如,绑定到列表框)的示例,请在此处将您的示例替换为以下内容

//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 Search 如何将数据集中的表绑定到C#和XAML中的WPF数据网格

就像silverninja写的那样,您必须绑定到数据表。 和往常一样,您需要正确的数据上下文。 我希望您会使用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的public属性

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM