C# 将数据从ADO.NET绑定到WPF
我正在创建一个WPF页面,我想使用Datagrid公开由SQL查询产生的数据。我使用C#和Sqldataadapter。代码隐藏文件中查询的相关代码为: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
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中