Как динамически добавлять данные в WPF DataGrid - PullRequest
1 голос
/ 26 января 2012

Я новичок в WPF и хочу визуализировать данные из SQL-запроса в WPF DataGrid. У меня проблема с тем, как правильно связать данные:

SqlCommand cmd = new SqlCommand(sql_dotaz, conn);
InfoText.Text += ("Příkaz vytvořen a připojen" + "\n");

try
{
    conn.Open();
    InfoText.Text += ("Připojení otevřeno" + "\n");

    SqlDataReader reader = cmd.ExecuteReader();

    int row_count = reader.FieldCount;  
    ArrayList propoj = new ArrayList();

    for (int i = 0; i < row_count; i++)
    {
        propoj.Add(reader.GetName(i));
        tabView.Columns.Add(new DataGridTextColumn 
            { 
                Header = reader.GetName(i), 
                Binding = new Binding(reader.GetName(i)) 
            });

        //Here is the problem!!!
        tabView.Items.Add(new {propoj[i] = "Hello"});
    }

Проблема в том, что при попытке добавить новый элемент выдается ошибка. Я не могу явно установить имя заголовка следующим образом (Invitation = "Hello").

I also tried

tabView.Columns.Add(new DataGridTextColumn 
    { 
        Header = reader.GetName(i), 
        Binding = new Binding(reader.GetName(i)) 
    });

string record = reader.GetName(i));
tabView.Items.Add(new {record = "Hello"});

Но по-прежнему существует проблема с именем заголовка - DataGrid пуст.

Пожалуйста, дайте мне знать, если у вас есть идеи. Большое спасибо!

Ответы [ 4 ]

1 голос
/ 26 января 2012

Прежде всего, я не думаю, что анонимные типы будут работать в привязке.Для этого вам каким-то образом придется создать объект-оболочку:

// easiest case
public class DatabaseObject
{
    public List<string> Items = new List<string>();
}

С этим вы можете легко сгенерировать ваши столбцы:

// this should be renamed in something like columns or fieldCount...
int row_count = reader.FieldCount;  

for (int i = 0; i < row_count; i++)
{
    tabView.Columns.Add(new DataGridTextColumn 
        { 
            Header = reader.GetName(i), 
            Binding = new Binding("Items[i]") 
        });
}

и заполнить свою DataGrid:

if(reader.HasRows)
{
    do
    {
        DatabaseObject obj = new DatabaseObject();
        for (int i = 0; i < row_count; i++)
        {
            obj.Items.Add(reader.GetString(i));
        }

        tabView.Items.Add(obj);
    }
    while(reader.NextResult());
}
0 голосов
/ 20 февраля 2012

В нахожу решение. Может быть, это не лучше, но это работает. Я создаю DataSet и SQL Adapter

adapter.Fill(dSet);
this.DataContext = dSet.Tables[0].DefaultView;

и в XAML:

<DataGrid Height="Auto" Width="Auto" Name="tabView3" ItemsSource="{Binding}" />

А теперь все отлично работает: -)

0 голосов
/ 26 января 2012

если хочешь пойти легким путем:

  1. заполнить таблицу данными своими данными.
  2. просто привязать источник данных из сетки данных к вашемуТаблица данных.(Читайте о DataBinding и MVVM)

    <DataGrid ItemsSource="{Binding MyFilledDataTableProperty}" />

  3. установить правильный текст данных.

0 голосов
/ 26 января 2012

Вам необходимо управлять этим с помощью DataBinding, поскольку вы указали технологию, подобную WPF, в тегах.

Пример ссылки:

Link1

Ссылка 2

Ссылка 3

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