Заполнить таблицу данных в любом элементе управления wpf - PullRequest
1 голос
/ 03 октября 2011

Причина, по которой мне трудно заполнять эту таблицу, заключается в том, что таблица get создается динамически:

MySql.Data.MySqlClient.MySqlDataReader selection = mySql.QuerySelect(textBox1.Text);  //textBox1.Text containts the text of the query to be executed

DataTable table = new DataTable();  // create table to hold results

// depending on the query construct the needed columns
for (int i = 0; i < selection.FieldCount; i++)
{
    table.Columns.Add("Column " + i);
}

// while there are rows insert them
while (selection.Read())
{
    object[] o = new object[selection.FieldCount];
    for(int j=0; j<selection.FieldCount; j++)
    {
        o[j] = selection[j].ToString();
    }
    table.Rows.Add(o);
}

Хорошо, пока после этого момента моя таблица построена.

Теперь моя проблема в том, как я могу отобразить эту таблицу, чтобы пользователь мог видеть результаты.

вот что я пробовал:

с сеткой данных:

<DataGrid AutoGenerateColumns="False" Margin="73,264,17,12" Name="dataGrid1" ItemsSource="{Binding}" />

код позади:

dataGrid1.DataContext = table.DefaultView;

, который не отображает результаты. строки заполняются, а строки две, но без содержимого ...

с ListView

<ListView Height="72" Margin="78,253,17,0" Name="listView1" VerticalAlignment="Top" ItemsSource="{Binding}" />

код позади:

            listView1.DataContext = table.DataSet;
            listView1.DataContext = table.DefaultView;

enter image description here

обратите внимание, что отображается правильное количество строк, но с неверным содержанием.

с помощью ListBox

похожая техника ....

Ответы [ 2 ]

0 голосов
/ 03 октября 2011

Если вы используете ListBox, вам нужно установить ItemTemplate для списка. ItemTemplate сообщает элементу управления, как визуализировать каждый элемент данных (DataRowView из представления таблицы по умолчанию).

Простым DataTemplate будет текстовый блок со свойством text, привязанным к одному из столбцов в вашей таблице

<ListBox ItemsSource="{Binding Path=MyTable.DefaultView}">
     <ListBox.ItemTemplate>
         <DataTemplate>
             <TextBlock Text="{Binding SomeColumn}" />
         </DataTemplate>
     </ListBox.ItemTemplate>
</ListBox>
0 голосов
/ 03 октября 2011

Вам нужны столбцы в вашей сетке, так что вы, вероятно, не хотите AutoGenerateColumns="False".

Чтобы использовать <ListView>, вам нужно будет сделать столбцы самостоятельно в <GridView>.

Чтобы использовать <ListBox>, установите DisplayTemplate на <DataTemplate>, содержащий пользовательский интерфейс для списков.

...