Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Заполнение gridview в статическом методе. / 20 сообщений из 20, страница 1 из 1
06.08.2013, 12:03
    #38356327
Students
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение gridview в статическом методе.
Привет всем.

Я заполняю gridview:
Код: c#
1.
2.
3.
4.
5.
6.
7.
public void Fill(){
DataTable dt = new DataTable();
.
.
.
gvFiles.DataSource = dt;
}



Скажите, каким образом можно будет сделать то же самое, если метод статический?

т.к. ошибка

gvFiles.DataSource = dt;
Код: plaintext
Для нестатического метода, поля или свойства требуется ссылка на объект
...
Рейтинг: 0 / 0
06.08.2013, 12:06
    #38356333
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение gridview в статическом методе.
Код: c#
1.
2.
3.
4.
5.
6.
7.
public static void Fill(DataGridView grid){
DataTable dt = new DataTable();
.
.
.
grid.DataSource = dt;
}
...
Рейтинг: 0 / 0
06.08.2013, 12:28
    #38356391
Students
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение gridview в статическом методе.
Но тогда, когда я вызываю этот метод в другом статическом методе, ошибка

Код: c#
1.
2.
3.
4.
private static void OnChanged(object source, FileSystemEventArgs e)
        {
            Fill([color=red]gvFiles[/color]);
        }


Код: plaintext
Для нестатического поля, метода или свойства "ModifiedFiles.Form1.gvFiles" требуется ссылка на объект
...
Рейтинг: 0 / 0
06.08.2013, 12:38
    #38356419
Students
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение gridview в статическом методе.
Код: c#
1.
2.
3.
4.
private static void OnChanged(object source, FileSystemEventArgs e)
        {
            Fill(gvFiles);
        }



нельзя вставить мой DataGridView в параметры статического метода Fill, т.к.
Для нестатического поля, метода или свойства "ModifiedFiles.Form1.gvFiles" требуется ссылка на объект
...
Рейтинг: 0 / 0
06.08.2013, 12:39
    #38356420
Students
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение gridview в статическом методе.
может как-то по-другому можно, если это вообще возможно?
...
Рейтинг: 0 / 0
06.08.2013, 13:02
    #38356466
Students
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение gridview в статическом методе.
возможно ли заполнить данными в статическом методе или нет?
...
Рейтинг: 0 / 0
06.08.2013, 13:10
    #38356475
Students
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение gridview в статическом методе.
skyANA
Код: c#
1.
2.
3.
4.
5.
6.
7.
public static void Fill(DataGridView grid){
DataTable dt = new DataTable();
.
.
.
grid.DataSource = dt;
}



Я не могу параметром передать свой DataGridView, т.к. Для нестатического поля, метода или свойства "ModifiedFiles.Form1.gvFiles" требуется ссылка на объект.

Может как-то по-другому можно?
...
Рейтинг: 0 / 0
06.08.2013, 13:30
    #38356517
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение gridview в статическом методе.
StudentsМожет как-то по-другому можно?Не использовать статические методы.
...
Рейтинг: 0 / 0
06.08.2013, 13:44
    #38356549
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение gridview в статическом методе.
Students
Код: c#
1.
2.
3.
4.
private static void OnChanged(object source, FileSystemEventArgs e)
        {
            Fill(gvFiles);
        }




А зачем OnChanged делать статическим?!
...
Рейтинг: 0 / 0
06.08.2013, 13:47
    #38356554
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение gridview в статическом методе.
PallarisStudents
Код: c#
1.
2.
3.
4.
private static void OnChanged(object source, FileSystemEventArgs e)
        {
            Fill(gvFiles);
        }




А зачем OnChanged делать статическим?!ТС тупо скопипастил этот пример и теперь мучается.
...
Рейтинг: 0 / 0
06.08.2013, 14:03
    #38356590
Students
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение gridview в статическом методе.
Да, спасибо, я сделал нестатическим.
Но всё-таки непонятно, как поступать с контролами в статических методах
...
Рейтинг: 0 / 0
06.08.2013, 14:12
    #38356612
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение gridview в статическом методе.
Students,

с контролами все прекрасно в статических методах. Нужно только понимать, что ваш static OnChanged ничего не знает о gvFiles
...
Рейтинг: 0 / 0
06.08.2013, 14:16
    #38356625
Students
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение gridview в статическом методе.
понял, спасибо.
...
Рейтинг: 0 / 0
06.08.2013, 16:08
    #38356908
Students
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение gridview в статическом методе.
PallarisStudents,

с контролами все прекрасно в статических методах. Нужно только понимать, что ваш static OnChanged ничего не знает о gvFiles

Можно ещё спросить?
я выполняю этот код при загрузке формы(public Form1()):

Код: c#
1.
2.
3.
4.
5.
DataTable dt = new DataTable();
.
.
.
gvFiles.DataSource = dt;



и мой datagridview заполняется.


Но когда я делаю тоже самое на OnChanged , то программа останавливается и форма закрывается (на строчке gvFiles.DataSource = dt).
Из-за чего это может быть? Ошибка никакая не выскакивает
...
Рейтинг: 0 / 0
06.08.2013, 16:19
    #38356945
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение gridview в статическом методе.
Students,

откуда знаешь, что никакая ошибка не выскакивает? Оберни в
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
try
{
....
grid.DataSource = table;
}
catch (Exception ex)
{
     MessageBox.Show(ex.ToString(),"Error");
}



Вообще, OnChanged возникает, когда меняется любой из файлов, а ты в этом случае меняешь весь DataTable. Т.е. в DataTable у тебя наверное всегда будет только одна запись. Как задание звучит вообще?
...
Рейтинг: 0 / 0
06.08.2013, 16:27
    #38356968
Students
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение gridview в статическом методе.
Ошибка:

Код: plaintext
Недопустимая операция в нескольких потоках: попытка доступа к элементу управления 'gvFiles' не из того потока, в котором он был создан.


Я беру из datagridview данные в datatable, добавляю к нему свой datatable, т.е. всё нормально. Запись показывается не одна, а добавляются.
Задание было такое - те файлы, которые изменяются выводить в форму (название + время).

Я всё сделал, у меня только 1 ошибка эта осталась.
...
Рейтинг: 0 / 0
06.08.2013, 16:53
    #38357043
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение gridview в статическом методе.
Students,

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Fill()
{
     if (gvFiles.InvokeRequired)
     {
            this.Invoke(new MethodInvoker(Fill), null);
     }
     else
     {
            DataTable dt = new DataTable();
            .
            .
            .
            gvFiles.DataSource = dt;
     }
}
...
Рейтинг: 0 / 0
06.08.2013, 16:58
    #38357066
Students
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение gridview в статическом методе.
Да, спасибо ещё раз за помощь.
Я нашёл ещё, что можно вместо
Код: c#
1.
gvFiles.DataSource = myDT;


писать

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Fill()
{
    SetTextSafe(dt);
}

void SetTextSafe(DataTable dt)
        {
            if (gvFiles.InvokeRequired)
            {
                gvFiles.Invoke(new Action<DataTable>((s) => gvFiles.DataSource = s), dt);
            }
            else
            {
                gvFiles.DataSource = dt;
            }
        }



И значения в griddataview будут записываться (правда их видно только в коде, а показывается в datagridview красный крест)
...
Рейтинг: 0 / 0
06.08.2013, 17:00
    #38357073
Students
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение gridview в статическом методе.
чтобы красного креста не было нужно писать .Refresh();
Теперь всё.
Спасибо огромное за помощь и ответы.
...
Рейтинг: 0 / 0
06.08.2013, 17:00
    #38357076
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Заполнение gridview в статическом методе.
Students
Я беру из datagridview данные в datatable, добавляю к нему свой datatable, т.е. всё нормально.

Сомневаюсь, что нормально. Я бы сделал так:

Код: c#
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.
class ChangeEvent
{
     public DateTime eventTime {set;get;}
     public string filePath {set;get;}
     public ChangeEvent()
     {

     }

     public ChangeEvent(DateTime inTime, string inFilePath)
     {
           eventTime = inTime;
           filePath = inFilePath;
     }
}

List<ChangeEvent> eventLog = new List<ChangeEvent>();

Form1()
{
     BindingSource src_ = new BindingSource();
     src_.DataSource  = eventLog;
     dvFiles.DataSource = src_;
}

OnChanged(object source, FileSystemEventArgs e)
{
      lock (eventLog)
      {
           eventLog.Add(new ChangeEvent(....));
      }
      RefreshView();
}

void RefreshView()
{
     if (gvFiles.InvokeRequired)
     {
            this.Invoke(new MethodInvoker(Fill), null);
     }
     else
     {
            gvFiles.Refresh();
     }
}
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Заполнение gridview в статическом методе. / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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