Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将数据从ADO.NET绑定到WPF_C#_Wpf_Binding_Ado.net - Fatal编程技术网

C# 将数据从ADO.NET绑定到WPF

C# 将数据从ADO.NET绑定到WPF,c#,wpf,binding,ado.net,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(); d

我正在创建一个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选择要绑定到的表或视图。A是一个集合。请参阅这篇关于如何绑定的相关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和谷歌搜索

就像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>

密码是手写的

pps:你应该认真研究MVVM,让事情变得更清楚;)


PPP:如果你想混淆codebehind和binding,你只需设置正确的DataContext,并绑定到DataTable的公共属性

datatSet2需要是公共属性,窗口的DataContext需要是代码behind。你的代码behind看起来像什么。。?您是否可以创建一个方法,并在加载事件中调用一个名为BindData()的方法,例如,然后创建该方法BindData(),并将您的代码放在DataAdapter中