Привязать данные из ADO.NET к WPF - PullRequest
2 голосов
/ 15 февраля 2012

Я создаю страницу WPF и хочу предоставить данные, полученные в результате запроса SQL, с использованием Datagrid.Я использую 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?

Ответы [ 3 ]

1 голос
/ 15 февраля 2012

Вам необходимо выбрать таблицу или представление для DataGrid для привязки. A DataSet представляет собой набор DataTables. См. Эту статью о том, как связать DataSet с WPG DataGrid .

.
0 голосов
/ 15 февраля 2012

, как писал Сильверниня, вы должны привязать данные. и, как всегда, вам нужен правильный текст данных. Я хотел бы, чтобы вы использовали 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 делает вещи намного понятнее;)

ppps: если вы хотите смешать код и связывание, вам просто нужно установить правильный DataContext и связать с открытым свойством вашего DataTable

0 голосов
/ 15 февраля 2012

Вам нужно связать 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 Как связать таблицу в наборе данных с сеткой данных WPF в C # и XAML

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...