powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Как обновить данные в БД из DataGrid
25 сообщений из 27, страница 1 из 2
Как обновить данные в БД из DataGrid
    #36746331
soros26
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть WPF приложение,есть Datagrid,есть DataSet(сгенерированный VS из таблиц БД SQL).
Может кто-нибудь показать пример как обновить данные в БД из измененного DataGrid(пользователь сам меняет данные в ячейках) по нажатию на кнопку хотя бы с помощью стандартного метода Update?)
Поскольку ничего из того что работало в WinForms не работает...
Например, вот так выглядит DataGrid в Xaml:
Код: plaintext
<DataGrid AutoGenerateColumns="True" Height="200" Name="dataGrid1" VerticalAlignment="Top" Width="608" />

Вот так я создаю DataTable и Adapter:
Код: plaintext
1.
DataTable usertable = new DataTable();
            DataSet1TableAdapters.UsersTableAdapter aduser = new UsersTableAdapter();
По нажатию на эту кнопку DataGrid заполняется данными из БД SQL (с этим проблем нет-DataGrid нормально заполняется данными):
Код: plaintext
1.
2.
3.
4.
private void button4_Click_1(object sender, RoutedEventArgs e)
        {            
            usertable = aduser.GetData();
            dataGrid1.ItemsSource = usertable.DefaultView;
        }
По нажатию на эту кнопку должны обновиться данные в БД из датагрида:
Код: plaintext
1.
2.
3.
4.
5.
private void button5_Click(object sender, RoutedEventArgs e)
        {
           
            aduser .Update(userdata);
            usertable.AcceptChanges();
        }

Заранее спасибо всем за помощь и понимание.
...
Рейтинг: 0 / 0
Как обновить данные в БД из DataGrid
    #36746336
soros26
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеется в виду DataGrid из WPF, язык C#, база данных MsSQL.
...
Рейтинг: 0 / 0
Как обновить данные в БД из DataGrid
    #36746338
Bob Dylan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
soros26,

вообще-то это автоматически через байндинг ( two way binding) должно работать,
покажите, как он определён
...
Рейтинг: 0 / 0
Как обновить данные в БД из DataGrid
    #36746339
Bob Dylan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://www.codeproject.com/KB/WPF/WPFDataGridExamples.aspx
...
Рейтинг: 0 / 0
Как обновить данные в БД из DataGrid
    #36746345
soros26
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Bob Dylansoros26,

вообще-то это автоматически через байндинг ( two way binding) должно работать,
покажите, как он определён

Насколько я знаю, two way позволяет обновлять данные в DataTable из различных контролов/источников. Но обновить данные в самой БД с помощью binding не получится.
...
Рейтинг: 0 / 0
Как обновить данные в БД из DataGrid
    #36746347
Bob Dylan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
soros26,


верно, это из приведённой ссылки:
привязаная datatable изменятся автоматически, но этого, конечно, мало, нужно вызавать dataadapter.Update
почитайте статью, разберитесь, там всё доходчиво описано

When the user edits the Customers data within the DataGrid, the bound in-memory DataTable is updated accordingly. However, these updates are not automatically written back to the database. It is up to the developer to decide when changes to the DataTable are written back to the database depending on the requirements of the application. For example, in some cases, you might wish to submit a batch of changes via a "Submit" button, or you may wish to have the database updated as the user commits each row edit. In order to support these, the rows that the DataTable contains have a RowState property which indicates whether they contain changes which should be synchronized with the database. The synchronization process is easily achieved via the TableAdapter's Update method.

The following example shows how the RowChanged and RowDeleted events can be handled so that changes in the DataTable state are written to the database each time the user changes a row:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
public CustomerDataProvider()
{
    NorthwindDataSet dataset = new NorthwindDataSet();

    adapter = new CustomersTableAdapter();
    adapter.Fill(dataset.Customers);

    dataset.Customers.CustomersRowChanged +=
        new NorthwindDataSet.CustomersRowChangeEventHandler(CustomersRowModified);
    dataset.Customers.CustomersRowDeleted +=
        new NorthwindDataSet.CustomersRowChangeEventHandler(CustomersRowModified);
}

void CustomersRowModified(object sender, NorthwindDataSet.CustomersRowChangeEvent e)
{
    adapter.Update(dataset.Customers);
}
...
Рейтинг: 0 / 0
Как обновить данные в БД из DataGrid
    #36746350
Bob Dylan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bob Dylansoros26,


верно, это из приведённой ссылки:
привязаная datatable изменятся автоматически, но этого, конечно, мало, нужно вызавать dataadapter .Update

sorri, имелось в виду table adapter
...
Рейтинг: 0 / 0
Как обновить данные в БД из DataGrid
    #36746613
soros26
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Bob Dylanhttp://www.codeproject.com/KB/WPF/WPFDataGridExamples.aspx
Там накручено нереально много лишнего и вычленить что-либо невозможно.
Хочется попроще пример:)
...
Рейтинг: 0 / 0
Как обновить данные в БД из DataGrid
    #36746647
soros26
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все! Разобрался!
Всем спасибо, все свободны:)

ps: вот например такой xaml
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
<Window x:Class="TestDataWPF.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded" IsEnabled="True">
    <Grid>
        <DataGrid ItemsSource="{Binding}" AutoGenerateColumns="True" Name="dataGrid1"/>
    </Grid>
</Window>
А вот code behind:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Data.SqlClient;
using TestDataWPF.DataSet1TableAdapters;
using System.Data;

namespace TestDataWPF
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
         public UsersTableAdapter adapter;
         DataSet1 dataset = new DataSet1();
        public MainWindow()
        {
            InitializeComponent();
            adapter = new UsersTableAdapter();
            adapter.Fill(dataset.Users);

            dataset.Users.UsersRowChanged += new DataSet1.UsersRowChangeEventHandler(UsersRowModified);           
            this.DataContext = dataset.Users.DefaultView;
        }
       
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {

        }
        void UsersRowModified(object sender, DataSet1.UsersRowChangeEvent e)
        {
            adapter.Update(dataset.Users);
        }
    }

}
...
Рейтинг: 0 / 0
Как обновить данные в БД из DataGrid
    #37055702
alex_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Только нужно было сказать, что был создан пользовательский TableAdapter в котором настроены команды на выборку редактирование и удаление записи. Именно благодоря этому все работает.
...
Рейтинг: 0 / 0
Как обновить данные в БД из DataGrid
    #37055840
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Адаптеры... Да еще и в впф. Эта жесть.
...
Рейтинг: 0 / 0
Как обновить данные в БД из DataGrid
    #37143436
alex_myzn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделал все как описано в примерах В принципе все понятно. Но... событие PhysicianRowModified не вызывается...
Вот код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
<Window x:Class="DataBaseTest2.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:DataBaseTest2"
    Title="Window1" Height="300" Width="563" 
    xmlns:my="http://schemas.microsoft.com/wpf/2008/toolkit">
    
    <Window.Resources>
        <!-- create an instance of our DataProvider class -->
        <ObjectDataProvider x:Key="PhysicianDataProvider" ObjectType="{x:Type local:PhysicianDataProvider}"/>
        <!-- define the method which is invoked to obtain our data -->
        <ObjectDataProvider x:Key="Physician" ObjectInstance="{StaticResource PhysicianDataProvider}" MethodName="GetPhysician"/>
    </Window.Resources>

    <DockPanel DataContext="{Binding Source={StaticResource Physician}}">
        <my:DataGrid AutoGenerateColumns="False" Margin="0,0,0,0" Name="dataGrid1"  ItemsSource="{Binding}" Width="400" HorizontalAlignment="Left">
            <my:DataGrid.Columns>
                <my:DataGridTextColumn Binding="{Binding Path=UserName}" Header="UserName" />
                <my:DataGridTextColumn Binding="{Binding Path=PhysicianFirstName}" Header="PhysicianFirstName" />
                <my:DataGridTextColumn Binding="{Binding Path=PhysicianLastName}" Header="PhysicianLastName" />
                <my:DataGridTextColumn Binding="{Binding Path=HospitalName}" Header="HospitalName" />
                <my:DataGridTextColumn Binding="{Binding Path=Department}" Header="Department" />
            </my:DataGrid.Columns>
        </my:DataGrid>
        <StackPanel Orientation="Vertical">
        <Button Height="38" Name="btn_post" Width="72" Click="btn_post_Click">Post</Button>
        <Button Height="38" Name="btn_delete" Width="72" Click="btn_delete_Click">Delete</Button>
        </StackPanel>
    </DockPanel>
</Window>

А это класс PhysicianDataProvider.cs
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using DataBaseTest2.NavigoDataSetTableAdapters;

namespace DataBaseTest2
{

    public class NavigoDataProvider
    {
        private static NavigoDataSet navigoDataSet;

        public static NavigoDataSet NavigoDataSet
        {
            get
            {
                if (navigoDataSet == null)
                {
                    navigoDataSet = new NavigoDataSet();
                }
                return NavigoDataProvider.navigoDataSet;
            }
        }
    }

    public class PhysicianDataProvider
    {
        private PhysicianTableAdapter adapter;
        private NavigoDataSet dataset = new NavigoDataSet();


        public PhysicianDataProvider()
        {
            adapter = new PhysicianTableAdapter();
            adapter.Fill(NavigoDataProvider.NavigoDataSet.Physician);

            dataset.Physician.PhysicianRowChanged += new NavigoDataSet.PhysicianRowChangeEventHandler(PhysicianRowModified);
            //dataset.Physician.PhysicianRowDeleted += new NavigoDataSet.PhysicianRowChangeEventHandler(PhysicianRowModified);
        }


        void PhysicianRowModified(object sender, NavigoDataSet.PhysicianRowChangeEvent e)
        {
            adapter.Update(NavigoDataProvider.NavigoDataSet.Physician);
        }

        public DataView GetPhysician()
        {
            return NavigoDataProvider.NavigoDataSet.Physician.DefaultView;
        }
    }
}

Пробую произвести изменения в гриде и никакой реакции. Событие PhysicianRowModified не дергается. Понимаю что где-то чего-то не подключено, а где и что не могу разобраться.
Есть идеи?
И еще... Как подключить команду Post на кнопку формы.
...
Рейтинг: 0 / 0
Как обновить данные в БД из DataGrid
    #37144020
i
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
i
Гость
Идея простая - выбросить и забыть Dataset. Для нормальной работы контролов wpf нужны ObservableCollection & INotifyPropertyChanged иначе не будет реакции на изменения и будут значительные тормоза из-за создания в памяти копии коллекции с нужным интерфейсом.
List vs ObservableCollection
...
Рейтинг: 0 / 0
Как обновить данные в БД из DataGrid
    #37144119
alex_myzn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну я бы не стал сразу списывать DataSet в утиль. После некоторых переделок согласно примера от soros26 все заработало. Но остался вопрос. Почему я должен использовать провайдеров внутри класса формы и не могу вынести их в отдельный класс. Если я таки выношу их не работает событие RowModified и не понятно как использовать кнопки в окне для Post и Delete в гриде, ведь экземпляр класса не создается. Кстати при работе внутри окна проблема с Post решается а вот с Delete еще не разобрался.
...
Рейтинг: 0 / 0
Как обновить данные в БД из DataGrid
    #37144139
Фотография Шайтан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iИдея простая - выбросить и забыть Dataset. Для нормальной работы контролов wpf нужны ObservableCollection & INotifyPropertyChanged иначе не будет реакции на изменения

мат часть хотя бы выучил, ... ну или просто жуй, чем говори
...
Рейтинг: 0 / 0
Как обновить данные в БД из DataGrid
    #37144355
i
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
i
Гость
ШайтанiИдея простая - выбросить и забыть Dataset. Для нормальной работы контролов wpf нужны ObservableCollection & INotifyPropertyChanged иначе не будет реакции на изменения

мат часть хотя бы выучил, ... ну или просто жуй, чем говори

Шайтан, уверен, что ты до сих пор жуешь dataset'ы и не можешь их проглотить. Для тех кто в танке, перечисленные интерфейсы говорят сами за себя.
Использование Dataset дает:
- двойное увеличение памяти
- снижение скорости заполнения\обновления минимум на порядок
- требует дополнительных и утомительных танцев с бубнами для отслеживания событий в коллекции

Дальше матчасть для тебя разжевывать некогда. Жуй и не нервничай
...
Рейтинг: 0 / 0
Как обновить данные в БД из DataGrid
    #37144370
Фотография Шайтан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iИспользование Dataset дает:
- двойное увеличение памяти
- снижение скорости заполнения\обновления минимум на порядок
- требует дополнительных и утомительных танцев с бубнами для отслеживания событий в коллекции

теоретег, хоть одно подтверждение произнесённому приведёшь?

а по поводу бубнов - ну не умеешь пользоваться, дык не берись
...
Рейтинг: 0 / 0
Как обновить данные в БД из DataGrid
    #37144489
i
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
i
Гость
ШайтанiИспользование Dataset дает:
- двойное увеличение памяти
- снижение скорости заполнения\обновления минимум на порядок
- требует дополнительных и утомительных танцев с бубнами для отслеживания событий в коллекции

теоретег, хоть одно подтверждение произнесённому приведёшь?

а по поводу бубнов - ну не умеешь пользоваться, дык не берись

Подтверждение третьему пункту тебе уже продемонстрировали. Подобные бубны - маразм,совершенно лишний код с душком, потенциальная угроза утечек и тд .ObservableCollection делает это все на автомате.
Для двух первых в сети полно примеров. Если можешь нетолько жевать, то подобные тесты делаются за полчаса самостоятельно. Если нет нужных интерфейсов, то создается копия в памяти, если не установлена опция OneTime.
Подобные вопросы должны исследоваться еще на начальном этапе перехода на wpf.
На эту тему есть достаточно четкие рекомендации. Самая главное из них - winforms и wpf - две большие разницы
...
Рейтинг: 0 / 0
Как обновить данные в БД из DataGrid
    #37144523
i
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
i
Гость
для любителей жевать dataset'ы
Binding to an ItemsSourceConsider a scenario in which you have a CLR List object that holds a list of employees that you want to display in a ListBox. To create a correspondence between these two objects, you would bind your employee list to the ItemsSource property of the ListBox. However, suppose you have a new employee joining your group. You might think that in order to insert this new person into your bound ListBox values, you would simply add this person to your employee list and expect this change to be recognized by the data binding engine automatically. That assumption would prove false; in actuality, the change will not be reflected in the ListBox automatically. This is because the CLR List object does not automatically raise a collection changed event. In order to get the ListBox to pick up the changes, you would have to recreate your list of employees and re-attach it to the ItemsSource property of the ListBox. While this solution works, it introduces a huge performance impact. Each time you reassign the ItemsSource of ListBox to a new object, the ListBox first throws away its previous items and regenerates its entire list. The performance impact is magnified if your ListBox maps to a complex DataTemplate.
A very efficient solution to this problem is to make your employee list an ObservableCollection. An ObservableCollection object raises a change notification which the data binding engine can receive. The event adds or removes an item from an ItemsControl without the need to regenerate the entire list.
The table below shows the time it takes to update the ListBox (with UI virtualization turned off) when one item is added. The number in the first row represents the elapsed time when the CLR List object is bound to ListBox element's ItemsSource. The number in the second row represents the elapsed time when an ObservableCollection is bound to the ListBox element's ItemsSource. Note the significant time savings using the ObservableCollection data binding strategy.

Data binding the ItemsSource
Update time for 1 item (ms)

To a CLR List object
1656

To an ObservableCollection
20



Bind IList to ItemsControl not IEnumerableIf you have a choice between binding an IList or an IEnumerable to an ItemsControl object, choose the IList object. Binding IEnumerable to an ItemsControl forces WPF to create a wrapper IList object, which means your performance is impacted by the unnecessary overhead of a second object.
...
Рейтинг: 0 / 0
Как обновить данные в БД из DataGrid
    #37144526
alex_myzn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ребят я Вижу вы крутые перцы. :-) Лично я с ВПФ работаю чуть больше месяца (хотя общий стаж кодирования очень даже солидный.) Так вот начиная работать с этим я вижу что империя Билли вообще отменяет все концепции сложившиеся годами. Возьмем хотя бы ObservableCollection. Нафига городить огород для того чтобы просто показать данные в простом гриде? Я вообще не понимаю почему не реализован чисто визуальный способ привязки? Это так трудно? Нет обязательно надо напихать кучу классов а потом объявить что для того что бы привязать данные к гриду надо написать код который это все делает, типа заполняет коллекции отслеживает события в них и генерит эти события эти события для того чтобы вызвать уже сами изменения в базу. Ну вот простой пример. Какой процент использования грида для некой коллекций и какой процент для отображения данных непосредственно из БД?
Вы уж простите старика но когда тратишь по пол дня что бы понять такую простую вещь у Билли - это начинает раздражать.

Вот пусть кто из вас объяснит как добавить кнопку Удалить по которой будет удаляться текучая строка из грида и соответственно из базы данных. только не говорите что сначала удали из базы а потом перечитай грид. Это все равно что телегу запрягать впереди лошади.
...
Рейтинг: 0 / 0
Как обновить данные в БД из DataGrid
    #37144631
i
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
i
Гость
Если ты давно программируешь, то уже должен привыкнуть к тому, что MS особо не заморачивается с совместимостью. С одной стороны это плохо, но с другой - позволяет переставить лошадь вперед и ехать быстрее, а не тащиться ей за телегой, как это было раньше.
wpf ушли от чисто визуального способа привязки и сделали все наоборот. Это позволяет значительно все упростисть, тк нет никакой левой возни с контролами.
Посмотри обучающие материалы по MVVM.
PS Удалить запись можно только средствами xaml. Для этого есть специальная акция в Blend SDK, но с Dataset этот номер не пройдет.
...
Рейтинг: 0 / 0
Как обновить данные в БД из DataGrid
    #37145414
Фотография уТКа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
@автор

не знаю на сколько % прав МСУ, но скажу одно, перейдя с Делфи на C# понял, что данным должны быть данными, а гриды, должны быть гридами.

иными словами:
"не фига смешивать конфеты и котлеты, будет не вкусно"!

еще проще:
"разделяй и властвуй" - никак к стати!
...
Рейтинг: 0 / 0
Как обновить данные в БД из DataGrid
    #37146057
alex_myzn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
уТКа@автор

не знаю на сколько % прав МСУ, но скажу одно, перейдя с Делфи на C# понял, что данным должны быть данными, а гриды, должны быть гридами.

иными словами:
"не фига смешивать конфеты и котлеты, будет не вкусно"!

еще проще:
"разделяй и властвуй" - никак к стати!

Я тоже из обращенных. Но вот именно этого я понять и не могу. Для чего гриды если не для отображения данных? Нет конечно можно их использовать по разному но все же, Это все равно что делать покрышки одного типа для всех марок машин, а потом пытаться пристроить их на диск и от КАМАЗа и от Запорожца.
...
Рейтинг: 0 / 0
Как обновить данные в БД из DataGrid
    #37146257
i
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
i
Гость
alex_myznуТКа@автор

не знаю на сколько % прав МСУ, но скажу одно, перейдя с Делфи на C# понял, что данным должны быть данными, а гриды, должны быть гридами.

иными словами:
"не фига смешивать конфеты и котлеты, будет не вкусно"!

еще проще:
"разделяй и властвуй" - никак к стати!

Я тоже из обращенных. Но вот именно этого я понять и не могу. Для чего гриды если не для отображения данных? Нет конечно можно их использовать по разному но все же, Это все равно что делать покрышки одного типа для всех марок машин, а потом пытаться пристроить их на диск и от КАМАЗа и от Запорожца.
Правильно. Одна покрышка на все диски не подходит. Грид - самый бестолковый вариант показа данных во многих случаях.
...
Рейтинг: 0 / 0
Как обновить данные в БД из DataGrid
    #37153927
alex_myzn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
i,

ЭЭЭЭ... Ну например надо показать список пациентов 6-й палаты. Вся функциональность заключается в том что доктор должен ткнуть пальцем(В НАШЕМ СЛУЧАЕ МЫШКОЙ) на того кому дадут сегодня электроток. Выбор врача зависит от кучи параметров начиная от с того на какую букву начинается фамилия пациента и кончая результатом анализа мочи. Да еще палата большая там примерно три сотни пациентов ну и как выводить будим?
...
Рейтинг: 0 / 0
25 сообщений из 27, страница 1 из 2
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Как обновить данные в БД из DataGrid
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]