我正在创建一个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文件的标题行中声明一个源吗?
答案 0 :(得分:1)
您需要选择要绑定到的DataGrid的表或视图。 DataSet
是DataTables
的集合。请参阅此相关的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)
背后的丑陋代码:
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的公共属性