2012-02-15 77 views
1

我正在創建一個WPF頁面,並且我想使用Datagrid公開從它的SQL查詢產生的數據。我使用C#和Sqldataadapter。代碼後面的查詢的相關代碼是:將數據從ADO.NET綁定到WPF

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

datatSet2的公共財產需要有一個公共財產和窗口的DataContext的需要是後面的代碼。 – Paparazzi 2012-02-15 14:46:11

+0

你的代碼背後是什麼樣子?你可以創建一個方法,並在load事件中調用一個名爲BindData()的方法,然後創建該方法的BindData()並將你的代碼放到DataAdapter – MethodMan 2012-02-15 14:57:16

回答

0

這裏需要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和谷歌搜索 How to bind a table in a dataset to a WPF datagrid in C# and XAML

0

像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使東西更清晰;)

公私夥伴關係:如果你想混淆代碼隱藏,並結合你只需要設定在正確的DataContext和綁定到數據表