1

Пишу на WPF. Вот мой код:

public void OpenTable(string TableName)
{
    using (SqlConnection conn = new SqlConnection(connectionString))
    {
        conn.Open();
        DataTable dt = new DataTable();
        SqlDataAdapter adapter = new SqlDataAdapter($"SELECT * FROM [{ TableName }]", conn);
        adapter.Fill(dt);
        dataGrid.DataContext = dt.DefaultView;
        int fh = 0;
        foreach (var el in dataGrid.Columns)
        {
            StackPanel panel = new StackPanel { Orientation = Orientation.Horizontal, HorizontalAlignment = HorizontalAlignment.Center };
            panel.Children.Add(new TextBlock { Text = el.Header.ToString() });
            Button Filter = new Button { Width = 10, Height = 10, Margin = new Thickness(3, 3, 0, 0), VerticalAlignment = VerticalAlignment.Center, BorderBrush = null, Background = null };
            //Filter.Click += Filter_Click;
            Filter.Name = "a" + fh.ToString();
            Filter.Background = new ImageBrush { ImageSource = new BitmapImage(new Uri("Image/filter.png", UriKind.RelativeOrAbsolute)) };
            panel.Children.Add(Filter);
            el.Header = panel;
            fh++;
            //ISCheced.Add(new List<bool>());
        }
        dataGrid.Columns[0].Visibility = Visibility.Hidden;//ошибка: Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции.
        try
        {
            GridContent.Children.Add(dataGrid);
        }
        catch { }
    }
}

Смотрела DataTable заполнен.
А DataGrid никак.
Мой DataGrid:

DataGrid dataGrid = new DataGrid { 
    Margin = new Thickness(0, 50, 2, 2), 
    VerticalAlignment = VerticalAlignment.Stretch, 
    HorizontalAlignment = HorizontalAlignment.Stretch 
};

введите сюда описание изображения

Jedy
  • 387
  • dataGrid.ItemsSource = dt; – aepot Oct 30 '20 at 10:31
  • @aepot Пробовала неработает. – Jedy Oct 30 '20 at 10:32
  • @aepot Искала в интернете предложили с DataContext, но как видите не работает. – Jedy Oct 30 '20 at 10:33
  • DataContext это для привязок Binding, когда в xaml пишете ItemsSource="{Binding MyData}", то Binding ищет MyData там, куда указывает DataContext. За источник данных отвечает именно ItemsSource. Примеров в сети немеряно: быть может этот пример решит вашу проблему? – aepot Oct 30 '20 at 10:38
  • @aepot Я пробовала через ItemSource, аналогичная ситуация. – Jedy Oct 30 '20 at 10:40
  • Смотрите ссылку что я дал выше – aepot Oct 30 '20 at 10:41
  • @aepot попробовала неработает – Jedy Oct 30 '20 at 10:43
  • Вот здесь еще я игрался с DataTable. – aepot Oct 30 '20 at 10:45
  • @aepot а может быть проблема в том что я создаю Datagrid в c#? – Jedy Oct 30 '20 at 10:55
  • Возможно. Пример по ссылке последний смотрите. Я там вообще с контролами в C# не работаю, так как это очень неудобно делать в WPF. Создайте пустой проект, перенесите тот пример в проект. И посмотрите, как оно работает. Тем путем, которым пошли вы, я не хожу, для меня это сложно. Именно поэтому, я не до конца понимаю, как и что у вас там работает, что и где создается. – aepot Oct 30 '20 at 10:59
  • @aepot посмотрела – Jedy Oct 30 '20 at 11:00
  • Вот еще пример, как работать с коллекциями в WPF. ListBox/ListView/ItemsControl вам помогут. – aepot Oct 30 '20 at 11:04
  • @aepot Спасибо. – Jedy Oct 30 '20 at 11:06
  • 1
    @aepot Попробовала создать через XAML DataGrid, сработало. Не знаете почему на работало когда создавала через c#? – Jedy Oct 30 '20 at 11:08
  • 1
    Когда вы создаете DataGrid в C#, вам наверное надо его в коллекцию контролов окна или в Grid добавлять? Иначе как окно узнает, что вы там где-то DataGrid создали, верно? Но история это не простая, примерно вот так оно может работать. Я все же предпочитаю работать с данными и полезным кодом, а WPF сам для меня создает контролы, в нужных местах, в нужном количетсве, и сам их обновляет. – aepot Oct 30 '20 at 11:12

0 Answers0